View Full Version : سوال Textbox
bigcowboy
سه شنبه 07 فروردین 1386, 13:49 عصر
چه طور میشه تکست باکسی ساخت که فقط بشه اعداد 1 تا 12 توش تایپ کرد
هیچ حروفی هم نشه فقط اعداد 1 تا 12
reza_N
سه شنبه 07 فروردین 1386, 14:09 عصر
توی رویدادtextchange هم براش شرط بین1 تا 12 بودن رو بزار
if (!(char.IsDigit(e.KeyChar))&&!(char.IsControl(e.KeyChar)))
{
e.Handled=true;
MessageBox.Show("لطفا برای وارد کردن کد فقط عدد وارد کنید");
}
perfeshnal
سه شنبه 07 فروردین 1386, 14:18 عصر
شما اول باید خاصیت Locked در TextBox رو True کنی بعد این کد ها رو در رویداد KeyPress اون وارد کنی
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 48 Then
Text1 = Text1 + "0"
ElseIf KeyAscii = 49 Then
Text1 = Text1 + "1"
ElseIf KeyAscii = 50 Then
Text1 = Text1 + "2"
ElseIf KeyAscii = 51 Then
Text1 = Text1 + "3"
ElseIf KeyAscii = 52 Then
Text1 = Text1 + "4"
ElseIf KeyAscii = 53 Then
Text1 = Text1 + "5"
ElseIf KeyAscii = 54 Then
Text1 = Text1 + "6"
ElseIf KeyAscii = 55 Then
Text1 = Text1 + "7"
ElseIf KeyAscii = 56 Then
Text1 = Text1 + "8"
ElseIf KeyAscii = 57 Then
Text1 = Text1 + "9"
End If
End Sub
CodeMasterX
سه شنبه 07 فروردین 1386, 15:40 عصر
اووووووووووووه!
نیازی به این همه کد نویسی نیست که!
این کد رو توی رویداد KeyPress(KeyAscii As Integer) بنویس:
Dim strData As String
strData = "0123456789"
If KeyAscii >=27 Then
If Instr(1,strData,Chr(KeyAscii)) = 0 Then
KeyAscii = 0
Endif
End If
شرط اول برای این هست که از کلید BackSpace,Space,Enter هم بشه استفاده کرد.
شرط دوم چک می کنه که کاراکتر وارد شده یکی از اعداد 0 تا 9 هست یا نه.اگر نبود KeyAscii رو برابر با 0 قرار میده.همین!
__siavash__
سه شنبه 07 فروردین 1386, 16:38 عصر
bigcowboy (http://barnamenevis.org/forum/member.php?u=35812)
از این دو تا کد هم میتونی استفاده کنی که اولی فقط اعداد بین 1 تا 12 رو قبول میکنه و موقع خروج از تکس باکس چکشون میکنه
و کد دومی که فقط عدد قبول میکنه با امکان ویرایش ( کد perfeshnal (http://barnamenevis.org/forum/member.php?u=20345) امکان ویرایش شدن نداره !!! و کد CodeMasterX (http://barnamenevis.org/forum/member.php?u=34556) هم اعداد بالا تر از 12 هم قبول میکنه )
کد اولی اینه:
Private Sub Text1_LostFocus()
Dim i As Integer
i = 1
Do Until i = 13
If Val(Text1.Text) <> i Then
i = i + 1
Else
Exit Sub
End If
Loop
MsgBox "شما باید یک عدد بین 1 تا 12 وارد کنید", vbCritical
Text1.SetFocus
End Sub
S_VB.max
سه شنبه 07 فروردین 1386, 16:46 عصر
فقط اعداد 1 تا 12
Dim a As Integer
Private Sub Text1_Change()
If Val(Text1.Text) > 13 Then
Text1.Text = a
End If
a = Val(Text1.Text)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim strData As String
strData = "0123456789"
If KeyAscii >= 27 Then
If InStr(1, strData, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If
End Sub
romina2006
سه شنبه 07 فروردین 1386, 20:09 عصر
فقط اعداد بین 1 تا 12 :
Private Sub Text1_Change()
If InStr(Text1.Text, "-") Then Text1.Text = ""
If IsNumeric(Text1.Text) = False Then Text1.Text = ""
If Val(Text1.Text) = 0 Then Text1.Text = ""
If Val(Text1.Text) > 12 Then Text1.Text = ""
End Sub
با کدهای زیر می تونی فقط عدد تایپ کنی :
Private Const GWL_STYLE = (-16)
Private Const ES_NUMBER = &H2000
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 Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim lngHwnd As Long
Dim lngReturn As Long
lngHwnd = GetWindowLong(Text1.hwnd, GWL_STYLE)
lngReturn = SetWindowLong(Text1.hwnd, GWL_STYLE, lngHwnd Or ES_NUMBER)
End Sub
یا
Private Sub Text1_KeyPress(KeyAscii As Integer)
If IsNumeric(Chr(KeyAscii)) = False And KeyAscii <> 8 Then
KeyAscii = 0
End If
End Sub
__siavash__
سه شنبه 07 فروردین 1386, 21:31 عصر
اون کدی که من در بالا گذاشتم 90% جواب میده ولی گاهی اوقات جواب نمیده ( ورودی 1si2 باشه از کاربر قبول میکنه)
این کد فکر نمیکنم مشکلی داشته باشه
Option Explicit
Private Sub Text1_LostFocus()
Dim i As Integer
Dim j As Integer
Dim A As Variant
i = Len(Text1.Text)
'**********************
If i > 2 Then
Call Error
Exit Sub
End If
'**********************
If i = 1 Then
j = Asc(Text1.Text)
If j <= 57 And j > 48 Then
Exit Sub
Else
Call Error
Exit Sub
End If
End If
'***********************
If i = 2 And Asc(Mid(Text1.Text, 1, 1)) = 49 Then
A = Mid(Text1.Text, 2, 1)
j = Asc(A)
If j = 48 Or j = 49 Or j = 50 Then
Exit Sub
Else
Call Error
End If
Else
Call Error
End If
'**************************
End Sub
Public Sub Error()
MsgBox "شما باید یک عدد بین 1 تا 12 وارد کنید", vbCritical
Text1.SetFocus
End Sub
اینم سورس همین کد بالاست:
alipaye
چهارشنبه 08 فروردین 1386, 05:11 صبح
کد S_VB.MAX کامله و ساده فقط A=VAL(TEXT1.TEXT رو تو GOT FOUCOS بنویسی بهتره تا در صورت خارج شده از محدوده مقدار قبلی رو جایگزین کنه
__siavash__
چهارشنبه 08 فروردین 1386, 15:18 عصر
این کد رفع اشکال شده ی کد بالاست (پست پنجم) که گفتم با بعضی ورودی ها مشکل داره،
Option Explicit
Private Sub Text1_LostFocus()
On Error GoTo A:
Dim i As Integer
i = 1
Do Until i = 13
If Text1.Text <> i Then
i = i + 1
Else
Exit Sub
End If
Loop
Call Error
Exit Sub
A:
Call Error
End Sub
Public Sub Error()
MsgBox "شما باید یک عدد بین 1 تا 12 وارد کنید!", vbCritical
Text1.SetFocus
End Sub
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.