# Native Code > برنامه نویسی در 6 VB >  limited textbox

## mohammad__d

به نام خدا
ایا میتوان روی textbox محدودیتهای زیر را اعمال کرد  وچگونه؟
1-  داخل ان نتوان جز کاراکتر یا جز ارقام را وارد نمود
2 - با زدن اینتر روی ان به طور خودکار به textbox بعدی منتقل شود؟

----------


## bahar60

بله با خاصیت keypress,keydown وبا استفاده از متغییر کلیدی keycode می توانید بفهمید چه کیدی فشرده شده وکلید های فشرده شده را کنترل کنید
اگر نیاز به توضیح بیشتر داشتید بفرمایید براتون مثال بفرستم

----------


## setarehman

باید یه متغییر تعریف کنید و مثلا اگه میخواید textbox فقط عدد بگیره براش این شرط رو بذارید که شامل فقط عدد بشه به طور مثال 
Num = "1234567890"
و سوال دوم هم که ساده هست 
&#40;Private Sub Text1_KeyPress&#40;Index As Integer, KeyAscii As Integer
               If KeyAscii = 13 Then SendKeys " &#123;Tab&#125;"
               
                                                                              End Sub

----------


## vbprogramer

برای سوال اول شما می تونید این طور هم بنویسید
Private Sub Text1_Change&#40;&#41;
Text1.Text = Val&#40;Text1.Text&#41;
End Sub

----------


## HoneySaberi

سلام.
من الان vb در دسترسم نیست که دقیق بگم. اما تا جایی که یادمه، توی یکی از ایونتهای KeyPress یا KeyDOwn کهبیشتر فکر کنم دومی باشه، keyAscii برگردونده میشه.
میتونی برای محدود کردن TextBox این کارو بکنی:

if not &#40;char&#40;keyascii&#41; like&#91;1234567890&#93;&#41; then keyasci=0
که توی این مثال فقط اعداد برای باکس قابل قبول هستند. میتونی کاراکترهای لازم دیگه رو هم به شرط اضافه کنی.

راستی!! یادت باشه اگه از این روش استفاده کردی، باید کلید BackSpace رو هم بررسی کنی تا کاربر بتونه از اون استفاده کنه. (ضحمت پیاده سازیش با خودت دیگه)
اون یکی سوال هم که جواب کامل داده شد.

امیدوارم مفید بوده باشه :oops:  :flower:

----------


## حامد مصافی

بهتر از همه اینه که از MaskEdit استفاده کنی 

   در مورد سوال دوم هم کد setarehman درسته ولی به جای کد زیر

If KeyAscii = 13 Then SendKeys " &#123;Tab&#125;" 


فکر کنم این بهتر باشه

If KeyAscii = vbKeyRetun Then text2.SetFocus

----------


## mohammad__d

به نام خدا
مورد tab انجام شد
مورد ارقام را لطفا با مثال بیان کنید

----------


## Behrouz_Rad

سلام.
آقا این کارا چیه.
یه راهنمایی کنید بنده خدا اینقدر گیج نشه.

این تابع که نوشتم جواب سوال اولته. خیلی هم کامله.
توی متغیر 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

وقتی میشه با یه خط کد این شرط رو چک کرد چرا یه تابع براش بنویسیم
توی همون رویداد keyperss  کافی این خط  کد رو بنویسید 
If InStr&#40;Num, Chr&#40;KeyAscii&#41;&#41; Or KeyAscii = 8 Then Else KeyAscii = 0
num هم که یه متغییر از نوع string هست که برابر با num="1234567890"قرار میدهیم
و مقدار tag textbox رو هم integer قرار میدهیم البته اگه بخواهیم  کاربرفقط عدد وارد کنه

----------


## Behrouz_Rad

سلام.
از نظر زمانی تابع با کد شما برابر.
مرتبه اجرایی الگوریتم:
<span dir=ltr>
f(n)=O(g(n))
</span>
موفق باشید.
 :wise1:

----------


## HoneySaberi

من هم با استفاده کردن از تابع موافق نیستم، هرچند مرتبه زمانی برابری با همون یک خط داشته باشه!
در ضمن چرا از Like برای تشخیص کاراکتر استفاده نمی کنید؟ اینطوری فکر کنم  برنامه خوانا تر بشه.

و محمد آقای عزیز، فکر میکنم واضح باشه دیگه. فقط شما توی ایونت keypress تکست باکست اینو وارد کن:
if not &#40;char&#40;keyascii&#41; like&#91;1234567890&#93;&#41; then keyasci=0

و توی کروشه جلوی Like کاراکترهای مجازو قرار بده.
یازهم یاداوری میکنم که یادت باشه اگه از این روش استفاده کردی، باید کلید BackSpace رو هم بررسی کنی. (که دوستای گلم به این مورد توجه نکردن!)

----------


## setarehman

این چیزایی که گفتین درست اما اینم قبول داشته باشید که کد من خوانا تر هست این یکی از شرط های برنامه نوسی اساسی و درست هست

----------


## Behrouz_Rad

سلام.
اون چیزی که شما میگی اسمش برنامه نویسی ساخت یافته است که پنج تا مزیت داره.
یکیشم اینه که برنامه های بزرگ رو به توابه کوچکتر تقسیم می کنن که در هر بار استفاده مجبور به تایپ کدهای زیاد نباشید مثل زبان C. که در اکثر برنامه های C تابع Main خیلی کوچیکه و کار اصلی رو توابع دیگه انجام میدن.
اگه با بخوایم واسه ی 1000 تا Text Box این محدودیت رو اجرا کنیم، آیا به نظر شما معقولانه است که برای همشون این کد رو بنویسیم؟؟؟
مرسی.
بهروز راد
 :wise1:

----------


## setarehman

حتما شما خودتون اینو خوب میدونید وقتی یه فرم به قول شما 1000 textbox داشته باشه ما نمیام 1000 textbox جدید ایجاد کنیم بلکه همون text1 رو آرایه در نظر میگیریم و خوب وقتی توی رویداد keypress  text1 
این کد رو نوشتین شامل همه textbox ها میشین

----------


## Behrouz_Rad

فرض کن بخوام برای هر Text Box در روال GotFocus یه کد جدا بنویسم.
اون موقع که دیگه استفاده از آرایه ای از عناصر کاربرد نداره عزیزم.
 :wise1:

----------


## mohammad__d

به نام خدا
مورد دوم هم حل شد با تشکر از همه. :flower:

----------


## SokooteShab1

سلام یه listbox دارم که میخوام با انتخاب هر آیتم چک کنه که قبلش یا همزمان با اون کلید کنترل فشار داده شده یا نه .... خواهشا اگه کسی می دونه کمکم کنه ممنون .

----------

