PDA

View Full Version : سوال: چگونه می توان کدی نوشت که تکست باکس فقط عدد بگیرد



hamid208
جمعه 14 مرداد 1390, 18:14 عصر
چگونه می توان کدی نوشت که تکست باکس فقط عدد بگیرد

محسن واژدی
جمعه 14 مرداد 1390, 22:45 عصر
از کد زیر در رویداد KeyPress استفاده کنید:

[vb]
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (KeyAscii < 48 Or KeyAscii > 57) And Not KeyAscii = 8 Then KeyAscii = 0
End Sub
[/vb

موفق باشید

Persian-Team
یک شنبه 16 مرداد 1390, 10:59 صبح
از کد زیر در رویداد KeyPress استفاده کنید:

[vb]
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (KeyAscii < 48 Or KeyAscii > 57) And Not KeyAscii = 8 Then KeyAscii = 0
End Sub
[/vb

موفق باشید

در قسمت Not KeyAscii = 8 كد اسكي 8 ميشه "؟" اين براي چي استفاده شده ؟
ممنون

محسن واژدی
یک شنبه 16 مرداد 1390, 11:11 صبح
در قسمت Not KeyAscii = 8 كد اسكي 8 ميشه "؟" اين براي چي استفاده شده ؟
اسکی 8 به Backspace اختصاص دارد که اگر آنرا حذف کنیم قادر به حذف عدد نوشته شده توسط کلید Backspace نخواهیم بود

موفق باشید

setroyd
چهارشنبه 19 مرداد 1390, 02:59 صبح
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8, 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub
اینم یه سورس ردیف واسه اینکار

IamOverlord
یک شنبه 23 مرداد 1390, 00:30 صبح
سلام دوستان،
برای این کار از قبل فکر شده، می شه از API هم استفاده کرد:
Private Const ES_NUMBER = &H2000&
Private Const GWL_STYLE = (-16)
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Form_Load()
Dim tmp As Long
tmp = SetWindowLong(Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER)
End Sub

alinini
دوشنبه 24 مرداد 1390, 11:12 صبح
اگه بخواهیم نقطه هم اضافه بشه باید چیکار کرد

just4froum
شنبه 29 مرداد 1390, 16:45 عصر
فقط کافیه کد اسکی 46 را هم به کدهای قبلی اضافه کنیید
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 46, 8, 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub

arenaw
یک شنبه 30 مرداد 1390, 19:12 عصر
اگه منظورت از نقطه استفاده از عدد اعشاریه باید یه کاری کنی که فقط یه بار بشه از نقطه استفاده کرد

محسن واژدی
سه شنبه 01 شهریور 1390, 12:35 عصر
اگه منظورت از نقطه استفاده از عدد اعشاریه باید یه کاری کنی که فقط یه بار بشه از نقطه استفاده کرد



سلام علیکم
بدین صورت فقط یک نقطه به عنوان اعشار قابل پذیرش است:

Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8, 48 To 57
Case 46
If InStr(1, Text1, ".") > 0 Then KeyAscii = 0
Case Else
KeyAscii = 0
End Select

End Sub



موفق باشید

farzinf
سه شنبه 01 شهریور 1390, 13:29 عصر
سلام دوستان،
برای این کار از قبل فکر شده، می شه از API هم استفاده کرد:
Private Const ES_NUMBER = &H2000&
Private Const GWL_STYLE = (-16)
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Form_Load()
Dim tmp As Long
tmp = SetWindowLong(Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER)
End Sub


سلام دوست عزیز می شه یکم بیشتر در مورد کد توضیح بدی و همچنین توضیح بدی که آیا API هم هست که بشه تکس باکس فقط کارکتر فارسی بگیره و یا فقط انگلیسی و یا اعداد + حروف فارسی و ...

و یه نظر سنجی :

کدوم کد بهتر به نظر شما ؟

با تشکر

IamOverlord
سه شنبه 01 شهریور 1390, 21:43 عصر
برای همه ی کار های کوچیک و بزرگ تابع API نوشته نشده بلکه برای کار های اساسی و مهم نوشته شده به طوری که برنامه نویس فلج نباشه. معمولا کار هایی که با توابع API انجام می شن سرعت بیشتری دارن و معمولا بهینه تر هستن، اما در کل همه چی بستگی به کدی داره که می خواید بنویسید.