View Full Version : limited textbox
mohammad__d
شنبه 21 آذر 1383, 08:51 صبح
به نام خدا
ایا میتوان روی textbox محدودیتهای زیر را اعمال کرد وچگونه؟
1- داخل ان نتوان جز کاراکتر یا جز ارقام را وارد نمود
2 - با زدن اینتر روی ان به طور خودکار به textbox بعدی منتقل شود؟
bahar60
شنبه 21 آذر 1383, 09:04 صبح
بله با خاصیت keypress,keydown وبا استفاده از متغییر کلیدی keycode می توانید بفهمید چه کیدی فشرده شده وکلید های فشرده شده را کنترل کنید
اگر نیاز به توضیح بیشتر داشتید بفرمایید براتون مثال بفرستم
setarehman
شنبه 21 آذر 1383, 09:10 صبح
باید یه متغییر تعریف کنید و مثلا اگه میخواید textbox فقط عدد بگیره براش این شرط رو بذارید که شامل فقط عدد بشه به طور مثال
Num = "1234567890"
و سوال دوم هم که ساده هست
(Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer
If KeyAscii = 13 Then SendKeys " {Tab}"
End Sub
vbprogramer
شنبه 21 آذر 1383, 11:18 صبح
برای سوال اول شما می تونید این طور هم بنویسید
Private Sub Text1_Change()
Text1.Text = Val(Text1.Text)
End Sub
HoneySaberi
شنبه 21 آذر 1383, 12:37 عصر
سلام.
من الان vb در دسترسم نیست که دقیق بگم. اما تا جایی که یادمه، توی یکی از ایونتهای KeyPress یا KeyDOwn کهبیشتر فکر کنم دومی باشه، keyAscii برگردونده میشه.
میتونی برای محدود کردن TextBox این کارو بکنی:
if not (char(keyascii) like[1234567890]) then keyasci=0
که توی این مثال فقط اعداد برای باکس قابل قبول هستند. میتونی کاراکترهای لازم دیگه رو هم به شرط اضافه کنی.
راستی!! یادت باشه اگه از این روش استفاده کردی، باید کلید BackSpace رو هم بررسی کنی تا کاربر بتونه از اون استفاده کنه. (ضحمت پیاده سازیش با خودت دیگه)
اون یکی سوال هم که جواب کامل داده شد.
امیدوارم مفید بوده باشه :oops: :flower:
حامد مصافی
شنبه 21 آذر 1383, 19:01 عصر
بهتر از همه اینه که از MaskEdit استفاده کنی
در مورد سوال دوم هم کد setarehman درسته ولی به جای کد زیر
If KeyAscii = 13 Then SendKeys " {Tab}"
فکر کنم این بهتر باشه
If KeyAscii = vbKeyRetun Then text2.SetFocus
mohammad__d
یک شنبه 22 آذر 1383, 11:51 صبح
به نام خدا
مورد tab انجام شد
مورد ارقام را لطفا با مثال بیان کنید
Behrouz_Rad
یک شنبه 22 آذر 1383, 13:51 عصر
سلام.
آقا این کارا چیه.
یه راهنمایی کنید بنده خدا اینقدر گیج نشه.
این تابع که نوشتم جواب سوال اولته. خیلی هم کامله.
توی متغیر StrValid، کاراکترهایی رو بنویس که می خوای کاربر بتونه (تاکید می کنم بتونه) اونها رو وارد کنه.
تابع زیر فقط اجازه میده که عدد وارد کنی.
<span dir=ltr>
Public Function KeyLimited(KeyAscii As Integer)
Dim StrValid As String
StrValid = "0123456789"
If KeyAscii > 26 Then
If InStr(StrValid, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
MsgBox "Invalid Character", vbExclamation + vbMsgBoxRight, "Warning"
End If
End If
End Function
</span>
بعدشم توی روال KeyPress تکس باکس اینجوری فراخونیش می کنی:
KeyLimited KeyAscii
جواب سوال دومم که توی روال KeyDown مینویسی:
If KeyCode=13 Then MyText.SetFocus
موفق باشید.
بهروز راد
:wise1:
setarehman
یک شنبه 22 آذر 1383, 14:19 عصر
وقتی میشه با یه خط کد این شرط رو چک کرد چرا یه تابع براش بنویسیم
توی همون رویداد keyperss کافی این خط کد رو بنویسید
If InStr(Num, Chr(KeyAscii)) Or KeyAscii = 8 Then Else KeyAscii = 0
num هم که یه متغییر از نوع string هست که برابر با num="1234567890"قرار میدهیم
و مقدار tag textbox رو هم integer قرار میدهیم البته اگه بخواهیم کاربرفقط عدد وارد کنه
Behrouz_Rad
یک شنبه 22 آذر 1383, 15:05 عصر
سلام.
از نظر زمانی تابع با کد شما برابر.
مرتبه اجرایی الگوریتم:
<span dir=ltr>
f(n)=O(g(n))
</span>
موفق باشید.
:wise1:
HoneySaberi
دوشنبه 23 آذر 1383, 08:30 صبح
من هم با استفاده کردن از تابع موافق نیستم، هرچند مرتبه زمانی برابری با همون یک خط داشته باشه!
در ضمن چرا از Like برای تشخیص کاراکتر استفاده نمی کنید؟ اینطوری فکر کنم برنامه خوانا تر بشه.
و محمد آقای عزیز، فکر میکنم واضح باشه دیگه. فقط شما توی ایونت keypress تکست باکست اینو وارد کن:
if not (char(keyascii) like[1234567890]) then keyasci=0
و توی کروشه جلوی Like کاراکترهای مجازو قرار بده.
یازهم یاداوری میکنم که یادت باشه اگه از این روش استفاده کردی، باید کلید BackSpace رو هم بررسی کنی. (که دوستای گلم به این مورد توجه نکردن!)
setarehman
دوشنبه 23 آذر 1383, 08:31 صبح
این چیزایی که گفتین درست اما اینم قبول داشته باشید که کد من خوانا تر هست این یکی از شرط های برنامه نوسی اساسی و درست هست
Behrouz_Rad
دوشنبه 23 آذر 1383, 08:44 صبح
سلام.
اون چیزی که شما میگی اسمش برنامه نویسی ساخت یافته است که پنج تا مزیت داره.
یکیشم اینه که برنامه های بزرگ رو به توابه کوچکتر تقسیم می کنن که در هر بار استفاده مجبور به تایپ کدهای زیاد نباشید مثل زبان C. که در اکثر برنامه های C تابع Main خیلی کوچیکه و کار اصلی رو توابع دیگه انجام میدن.
اگه با بخوایم واسه ی 1000 تا Text Box این محدودیت رو اجرا کنیم، آیا به نظر شما معقولانه است که برای همشون این کد رو بنویسیم؟؟؟
مرسی.
بهروز راد
:wise1:
setarehman
دوشنبه 23 آذر 1383, 13:39 عصر
حتما شما خودتون اینو خوب میدونید وقتی یه فرم به قول شما 1000 textbox داشته باشه ما نمیام 1000 textbox جدید ایجاد کنیم بلکه همون text1 رو آرایه در نظر میگیریم و خوب وقتی توی رویداد keypress text1
این کد رو نوشتین شامل همه textbox ها میشین
Behrouz_Rad
دوشنبه 23 آذر 1383, 14:05 عصر
فرض کن بخوام برای هر Text Box در روال GotFocus یه کد جدا بنویسم.
اون موقع که دیگه استفاده از آرایه ای از عناصر کاربرد نداره عزیزم.
:wise1:
mohammad__d
چهارشنبه 25 آذر 1383, 08:29 صبح
به نام خدا
مورد دوم هم حل شد با تشکر از همه. :flower:
SokooteShab1
سه شنبه 30 فروردین 1390, 09:19 صبح
سلام یه listbox دارم که میخوام با انتخاب هر آیتم چک کنه که قبلش یا همزمان با اون کلید کنترل فشار داده شده یا نه .... خواهشا اگه کسی می دونه کمکم کنه ممنون .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.