دوستان من چطوری می تونم تو Textbox اعدادو زمانی که تایپ می کنن سه رقم سه رقم به صورت خودکار جدا بشه
البته من با MaskEdit این کارو کردم ولی MaskEdit راست به چپو پشتیبانی نمی کنه و اعداد به صورت لاتین تایپ میشه
دوستان من چطوری می تونم تو Textbox اعدادو زمانی که تایپ می کنن سه رقم سه رقم به صورت خودکار جدا بشه
البته من با MaskEdit این کارو کردم ولی MaskEdit راست به چپو پشتیبانی نمی کنه و اعداد به صورت لاتین تایپ میشه
سلام
این کد رو در رویداد Change تکس باکس بزار
If Text2.Text <> "" Then
Text2.Text = Format(Text2.Text, "##,0")
Text2.SelStart = Len(Text2.Text)
End If
این فرمان تا 29 رقم مشکلی نداره (بسه دیگه مگه میخوای چیو حساب کنی) البته فکر کنم با تغییراتی بیشتر هم میشه.
سلام
به قول Armin62 می خوای مگه باهاش چکار کنی ؟
مشکل این کد اینه که اگه بخواهی وسط اعداد عددی وارد کنی به انتای تمامی اعداد می روی و دوباره باید برگدی عدد بعدی رو سرجاش بزنی. اگه یه ذخیره کننده محل قبلی رو هم بهش اضافه کنی تا حد خوبی قابل قبول میشه.
من که منظور شما رو متوجه نشدم میشه بیشتر توضیح بدید ؟
منظور ایشون این خطه
Text2.SelStart = Len(Text2.Text)
فقط مشکلی که هست:
text2.text=123,456,789 ====> val(text2.text)=123
دوست عزیز از این تابع استفاده کن از هر نمونه که خواستی برات تولید میکنه هیچ مشکلی هم نداره:
Public Function MaskText(txtTarget As VB.TextBox, strMask As String)
Static bolRunning As Boolean
If bolRunning Then
Exit Function
End If
bolRunning = True
Dim strTarget_Text As String
strTarget_Text = txtTarget.Text
Dim lngCursor_Pos As Long
lngCursor_Pos = txtTarget.SelStart
If Len(strMask) > Len(strTarget_Text) Then
strTarget_Text = strTarget_Text & Space(Len(strMask) - Len(strTarget_Text))
ElseIf Len(strMask) < Len(strTarget_Text) Then
strTarget_Text = Left(strTarget_Text, Len(strMask))
ElseIf Len(strMask) = 0 Then
Exit Function
End If
Dim strTarget_Char As String * 1
Dim strMask_Char As String * 1
Dim strTemp As String
Dim bolAlpha As Boolean
Dim aryLiterals As Variant
aryLiterals = Array("(", ")", "-", ".", ",", ":", ";", "/", "\", " ")
Dim lngLiteral_Index As Long
Dim bolLiteral As Boolean
Dim lngChar_Index As Long
For lngChar_Index = 1 To Len(strMask)
strTarget_Char = Mid(strTarget_Text, lngChar_Index, 1)
strMask_Char = Mid(strMask, lngChar_Index, 1)
For lngLiteral_Index = LBound(aryLiterals) To UBound(aryLiterals)
bolLiteral = (strMask_Char = aryLiterals(lngLiteral_Index))
If bolLiteral Then
Exit For
End If
Next lngLiteral_Index
Select Case strMask_Char
Case "#":
If (Not IsNumeric(strTarget_Char)) And (strTarget_Char <> " ") Then
strTemp = Right(strTarget_Text, Len(strTarget_Text) - lngChar_Index)
If lngChar_Index > 1 Then
strTarget_Text = Left(strTarget_Text, lngChar_Index - 1)
Else
strTarget_Text = ""
End If
strTarget_Text = strTarget_Text & " " & strTemp
End If
Case "@":
bolAlpha = ((Asc(strTarget_Char) >= 65) And (Asc(strTarget_Char) <= 90)) Or ((Asc(strTarget_Char) >= 97) And (Asc(strTarget_Char) <= 122))
If (Not bolAlpha) And (strTarget_Char <> " ") Then
strTemp = Right(strTarget_Text, Len(strTarget_Text) - lngChar_Index)
If lngChar_Index > 1 Then
strTarget_Text = Left(strTarget_Text, lngChar_Index - 1)
Else
strTarget_Text = ""
End If
strTarget_Text = strTarget_Text & " " & strTemp
End If
Case Else:
If (strTarget_Char <> strMask_Char) And bolLiteral Then
strTemp = Right(strTarget_Text, Len(strTarget_Text) - (lngChar_Index - 1))
strTarget_Text = Left(strTarget_Text, lngChar_Index - 1)
strTarget_Text = strTarget_Text & strMask_Char & strTemp
If lngChar_Index = lngCursor_Pos Then
lngCursor_Pos = lngCursor_Pos + 1
End If
End If
End Select
Next lngChar_Index
txtTarget.Text = Left(strTarget_Text, Len(strMask))
txtTarget.SelStart = lngCursor_Pos
bolRunning = False
End Function
میشه بگین چه چوری از این تابع استفاده کنم؟
جناب farzadvb میشه راهنمایی کنید؟
به جای Val از این استفاده کن
Replace("123,456,789", ",", "")
سلام چه طور میشه توی textbox بین اعداد را با خط فاصله جدا کرد
البته اینجوری هم تو تکس باکس میتونی استفاده کنی
حالا بین
zz+1
zz+0
فرق هست
Private Sub Text1_Change()
n = Replace(Text1.Text, ",", "")
zz = Text1.SelStart
Text1.Text = Replace(Format(n, "#,###"), Mid(Format(1000, "#,###"), 2, 1), ",")
Text1.SelStart = zz + 1
End Sub