PDA

View Full Version : سوال: تکس باکس مخصوص قیمت به همراه نوشتن قیمت به حروف



nima_8m
جمعه 17 آذر 1391, 22:26 عصر
سلام

من میخوام تو تکس باکس قیمت با فرمت مخصوص پول نوشته بشه یعنی 3رقم ، سه رقم از هم جدا بشه و

همزمان این مقدار به صورت حرف در یه لیبل نوشته بشه

یه سری نمونه دیدم ولی درست کار نمیکردم

مقادیر من همه اعداد صحیح هستن و اعشار ندارن نمونه ها
3,010
1,548,500
ممنون از راهنمایی شما

shahryari
جمعه 17 آذر 1391, 23:16 عصر
با سلام
اگر اين كدها را در رويداد text change تكست باكس مورد نظرتان بنويسيد هنگام تايپ ،3 رقم 3 رقم جدا ميشود.
در اين مثال نام آن تكست باكس TextBox1 است:

TextBox1.Text = FormatNumber(TextBox1.Text, 0, TriState.True)
TextBox1.Select(TextBox1.TextLength, TextBox1.TextLength)
اما براي تبديل عدد به حروف فارسي بايد توابع مربوطه را به پروژه تان اضافه كنيد

shahryari
جمعه 17 آذر 1391, 23:27 عصر
يك ماژول به پروژه تان اضافه كنيد و دوتا تابع زير رو به ماژول اضافه كنيد

Private Function num_to_text(ByVal Number As Integer) As String
Dim S As String = ""
Dim I, L As Long
Dim h(0 To 3) As Byte
L = Len(Trim(Str(Number)))
If Number = 0 Then
num_to_text = ""
Exit Function
End If
If Number = 100 Then
num_to_text = "يكصد"
Exit Function
End If

If L = 2 Then h(1) = 0
If L = 1 Then
h(1) = 0
h(2) = 0
End If

For I = 1 To L
h(3 - I + 1) = Mid(Trim(Str(Number)), L - I + 1, 1)
Next I

Select Case h(1)
Case 1
S = "يكصد"
Case 2
S = "دويست"
Case 3
S = "سيصد"
Case 4
S = "چهارصد"
Case 5
S = "پانصد"
Case 6
S = "ششصد"
Case 7
S = "هفتصد"
Case 8
S = "هشتصد"
Case 9
S = "نهصد"
End Select

Select Case h(2)
Case 1
Select Case h(3)
Case 0
S = S & " و " & "ده"
Case 1
S = S & " و " & "يازده"
Case 2
S = S & " و " & "دوازده"
Case 3
S = S & " و " & "سيزده"
Case 4
S = S & " و " & "چهارده"
Case 5
S = S & " و " & "پانزده"
Case 6
S = S & " و " & "شانزده"
Case 7
S = S & " و " & "هفده"
Case 8
S = S & " و " & "هجده"
Case 9
S = S & " و " & "نوزده"
End Select

Case 2
S = S & " و " & "بيست"
Case 3
S = S & " و " & "سي"
Case 4
S = S & " و " & "چهل"
Case 5
S = S & " و " & "پنجاه"
Case 6
S = S & " و " & "شصت"
Case 7
S = S & " و " & "هفتاد"
Case 8
S = S & " و " & "هشتاد"
Case 9
S = S & " و " & "نود"
End Select

If h(2) <> 1 Then
Select Case h(3)
Case 1
S = S & " و " & "يك"
Case 2
S = S & " و " & "دو"
Case 3
S = S & " و " & "سه"
Case 4
S = S & " و " & "چهار"
Case 5
S = S & " و " & "پنج"
Case 6
S = S & " و " & "شش"
Case 7
S = S & " و " & "هفت"
Case 8
S = S & " و " & "هشت"
Case 9
S = S & " و " & "نه"
End Select
End If
S = IIf(L < 3, Microsoft.VisualBasic.Right(S, Len(S) - 3), S)
num_to_text = S
End Function
Public Function Adad_to_text(ByVal Number As Double) As String
If Number = 0 Then
Adad_to_text = "صفر"
End If
If (Number < 0) Then
Number = Number * -1
Else
Number = Number
End If
Dim Flag As Boolean
Dim S As String
Dim I, L As Byte
Dim K(0 To 5) As Double

S = Trim(Str(Number))
L = Len(S)
If L > 15 Then
Adad_to_text = "بسيار بزرگ"
Exit Function
End If
For I = 1 To 15 - L
S = "0" & S
Next I
For I = 1 To Int((L / 3) + 0.99)
K(5 - I + 1) = Val(Mid(S, 3 * (5 - I) + 1, 3))
Next I
Flag = False
S = ""
For I = 1 To 5
If K(I) <> 0 Then
Select Case I
Case 1
S = S & num_to_text(K(I)) & " تريليون"
Flag = True
Case 2
S = S & IIf(Flag = True, " و ", "") & num_to_text(K(I)) & " ميليارد"
Flag = True
Case 3
S = S & IIf(Flag = True, " و ", "") & num_to_text(K(I)) & " ميليون"
Flag = True
Case 4
S = S & IIf(Flag = True, " و ", "") & num_to_text(K(I)) & " هزار"
Flag = True
Case 5
S = S & IIf(Flag = True, " و ", "") & num_to_text(K(I))
End Select
End If
Next I
Adad_to_text = S
End Function
--------------------
براي فراخواني اين توابع كافيست كد زير را در همان رويداد تكست چنج اضافه كنيد

If TextBox1.Text <> Nothing Then
Label1.Text = Adad_to_text(TextBox1.Text) & " " & "ريال"
Else
Label1.Text = Nothing
End If
عدد به حروف تبديل شده و همراه با كلمه "ريال" در يك ليبل نمايش داده ميشود

nima_8m
جمعه 17 آذر 1391, 23:29 عصر
با سلام
اگر اين كدها را در رويداد text change تكست باكس مورد نظرتان بنويسيد هنگام تايپ ،3 رقم 3 رقم جدا ميشود.
در اين مثال نام آن تكست باكس TextBox1 است:

TextBox1.Text = FormatNumber(TextBox1.Text, 0, TriState.True)
TextBox1.Select(TextBox1.TextLength, TextBox1.TextLength)
اما براي تبديل عدد به حروف فارسي بايد توابع مربوطه را به پروژه تان اضافه كنيد
ممنون از پاسختون
ولی موقع ثبت پیغام میده گذاشتم ببینید.

shahryari
جمعه 17 آذر 1391, 23:38 عصر
اين خطا موقعي پيش ميايد كه تمام متن داخل تكست باكس را پاك كني
كه ميتواني با يك دستور شرطي آن را اصلاح كني
مثال:

If TextBox_mablag.Text <> Nothing Then
'كدها را اينجا بنويس
End If

nima_8m
جمعه 17 آذر 1391, 23:52 عصر
جناب : shahryari
از جوابهای کامل شما سپاسگزارم دقیقاً همونی شد که میخواستم.
:تشویق:

nima_8m
شنبه 18 آذر 1391, 00:00 صبح
تاپیک جدید نزنم:
تو همین پروژه اگه بخوایم یه تکس باکس فقط عدد و یا فقط حروف بگیره چیکار باید کرد؟

ehsan-68
شنبه 18 آذر 1391, 09:01 صبح
سلام ...

این برایه گرفتن عدد در خاصیت keypress ...



e.Handled = Not (IsNumeric(e.KeyChar) Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 45 Or Asc(e.KeyChar) = 47)

ehsan-68
شنبه 18 آذر 1391, 09:05 صبح
راستی اینم هست برایه فقط عددی ...


e.Handled = Not (Char.IsDigit(e.KeyChar))


چون فکر کنم تویه پست قبلی اشتباه باشه ...:متفکر:

اونو خودم امتحان نکردم ... فکر کنم برایه حرفه ...

اگه پست قبلی اشتباه بود بگین تا پاکش کنیم ... ( پستو )

shahryari
شنبه 18 آذر 1391, 10:56 صبح
اگر میخواهید فقط عدد در تکست باکس ذخیره شود در رویداد keypress کد زیر را بنویسید


If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back Then
e.Handled = True
End If

nima_8m
شنبه 18 آذر 1391, 22:08 عصر
و اگه اشتباه نکنم اینم برای حرف ...


IfChar.IsNumber(e.KeyChar) = FalseThen
e.Handled = True
EndIf
If e.KeyChar = (vbBack) Then
e.Handled = False
EndIf
If e.KeyChar = (vbTab) Then
e.Handled = False
EndIf


این کد برای فقط حروف جواب نداد

ehsan-68
شنبه 18 آذر 1391, 22:31 عصر
خوب ببین اینجوری جواب میده ..


If IsNumberic(e.KeyChar) = True Then
e.Handled = True
EndIf

shahryari
شنبه 18 آذر 1391, 23:11 عصر
اين هم براي فقط حروف

If IsNumeric(e.KeyChar) = True Then
e.Handled = True
End If
------------------

M.KH-SH
یک شنبه 19 آذر 1391, 20:44 عصر
http://barnamenevis.org/showthread.php?309223-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D9%85%D8%A8%D8%A7%D9%84%D8%BA-%D9%BE%D9%88%D9%84%DB%8C-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%A8%D9%87-%D8%AD%D8%B1%D9%88%D9%81-%28%D8%B1%DB%8C%D8%A7%D9%84%29-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B9%D8%AF%D8%AF-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%AC%D8%AF%D8%A7%DA%AF%D8%A7%D9%86%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9

اینم کامپوننت

rezaprogrammer
دوشنبه 20 آذر 1391, 14:55 عصر
سلام ...

این برایه گرفتن عدد در خاصیت keypress ...



e.Handled = Not (IsNumeric(e.KeyChar) Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 45 Or Asc(e.KeyChar) = 47)


کار می کنه ولی کامل نیست. مثلاً وقتی کلمه "-" زدم هندل نکرد

rezaprogrammer
دوشنبه 20 آذر 1391, 15:03 عصر
این کد برای تایپ فقط عدد خوبه

If Char.IsNumber(e.KeyChar) = False Then
e.Handled = True
Else
If TxtBalance.Text = "0" Then
TxtBalance.Text = ""
e.Handled = False
End If
End If
If e.KeyChar = Microsoft.VisualBasic.vbBack Then
If TxtBalance.Text = "" Then
TxtBalance.Text = "0"
End If
e.Handled = False
End If

If e.KeyChar = Microsoft.VisualBasic.vbTab Then
e.Handled = False
End If

rezaprogrammer
دوشنبه 20 آذر 1391, 15:15 عصر
با این تفاسیر فکر می کنم شکل کامل هندل برای تایپ فقط عدد و تبدیل به حروف و همچنین جدا کردن سه رقم اون با توجه به کدهای تبدیلی آقای shahryari اینطوری بشه:
لطفاً نظرتون رو بگید

Public Class FclsSample

Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If Char.IsNumber(e.KeyChar) = False Then
e.Handled = True
Else
If TextBox1.Text = "0" Then
TextBox1.Text = ""
e.Handled = False
End If
End If
If e.KeyChar = Microsoft.VisualBasic.vbBack Then
If TextBox1.Text.Trim = "" Then
TextBox1.Text = "0"
End If
e.Handled = False
End If

If e.KeyChar = Microsoft.VisualBasic.vbTab Then
e.Handled = False
End If
End Sub

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.Text <> Nothing Then
If TextBox1.Text = "0" Then
Label1.Text = Nothing
Else
Label1.Text = Adad_to_text(TextBox1.Text) & " " & "ريال"
End If

TextBox1.Text = FormatNumber(TextBox1.Text, 0, TriState.True)
TextBox1.Select(TextBox1.TextLength, TextBox1.TextLength)
Else
Label1.Text = Nothing
TextBox1.Text = "0"
End If

End Sub

Private Sub FclsSample_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Label1.Text = Nothing
End Sub
End Class

oranoos
شنبه 25 آذر 1391, 12:16 عصر
دوست عزیز shahryari ممنون از راهنمایی بسیار کاربردی و مفیدتون ؛ حالا اگه همین کار رو بخواهیم روی سلول های دیتاگریدی از نوع عددی اعمال کنیم باید چکار کنیم؟ ممنون