PDA

View Full Version : سوال: کار با تکست باکس



brownbear
یک شنبه 05 دی 1389, 16:02 عصر
سلام
می دونم تکراریه ولی هر چی گشتم پاسخ درستی پیدا نکردم
من یه تکست باکس دارم که می خواهم بعد از زدن چند عدد خودش ممیز را اضافه کنه (در هنگام وارد کردن عدد ممیز مشخص بشه ) و همچنین من در کد key press آن کدی برای جلوگیری از ورود کارکتر غیر از عدد نوشتم ولی می خوام کاربر نتونه بیشتر از یک ممیز را وارد کنه
از mask text box هم نمی خوام استفاده کنم

pedram_ns
یک شنبه 05 دی 1389, 16:45 عصر
این کد یک کاما بعد از سه رقم ایجاد می کنه:


Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.TextLength > 0 Then
TextBox1.Text = FormatNumber(TextBox1.Text, 0)
TextBox1.SelectionStart = TextBox1.TextLength
End If
End Sub

brownbear
یک شنبه 05 دی 1389, 18:01 عصر
سلام
دوست عزیز این کد اگر من ممیز بزنم ممیز رو پاک می کنه من گفتم اگه خواستم یک ممیز بزنه و فرمت خروجیش string است من می خوام ممیز بزنه مثلا بعد از سه رقم این کارو بکنه اگر هم کاربر خواست قبل از وارد کردن سه رقم ممیز رو بزنه ای کارکتر که کد شما ایجاد می کنه ممیز نیست

omid-vbAuto
یک شنبه 05 دی 1389, 19:59 عصر
این کد یک کاما بعد از سه رقم ایجاد می کنه:


Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.TextLength > 0 Then
TextBox1.Text = FormatNumber(TextBox1.Text, 0)
TextBox1.SelectionStart = TextBox1.TextLength
End If
End Sub

دوست عزیز کدی که دادین بعد از وارد کردن 15 رقم قات میزنه!!! علتش چیه؟؟؟:متفکر:

ali_najari
یک شنبه 05 دی 1389, 20:20 عصر
دوست عزیز این مطلب توی وبلاگ من هست!

ali_najari
یک شنبه 05 دی 1389, 20:24 عصر
دوست عزیز میتونید از تابع زیر استفاده کنید:


Function MaskNumbers(ByVal number As String)

Dim strAux As String
Dim strComma As String
Dim strPeriod As String

strPeriod = ""
number = number.Replace(",", "")
If InStr(number, ".") > 0 Then
strAux = Mid(number, 1, InStr(number, ".") - 1)
strPeriod = Mid(number, InStr(number, "."))
Else
strAux = number
End If

strComma = strAux
strAux = ""
While strComma.Length > 3
strAux = "," & Mid(strComma, strComma.Length - 2, 3) & strAux
strComma = Mid(strComma, 1, strComma.Length - 3)
End While

strAux = strComma & strAux & strPeriod
If Mid(strAux, 1, 1) = "," Then strAux = Mid(strAux, 2)

Return strAux
End Function

طریقه استفاده:

کد زیر را در textChange تکس باکس مربوطه به عنوان مثال در Textbox1 قرار دهید

Me.TextBox1.Text = MaskNumbers(TextBox1.Text)

pedram_ns
یک شنبه 05 دی 1389, 20:29 عصر
دوست عزیز کدی که دادین بعد از وارد کردن 15 رقم قات میزنه!!! علتش چیه؟؟؟:متفکر:

علتش اینه که شما دیگه خیلی مایه داری که 15 رقم مالی وارد می کنی!! :قهقهه:

نمی دونم برای خودم هم جالب بود بعد از 15 رقم به بعد مدام صفر وارد می کنه احتمالا به خاطر خصوصیت دستور FormatNumber هست. البته می تونید با کد نویسی خودتون بعد از هر سه رقم یک کاراکتر اضافه کنید.(این تاپیک رو قبل از دیدن تاپیک بالا نوشته بودم با بالایی کار کنید)

به هر حال فکر کنم مشکل این دوستمون(brownbear (http://barnamenevis.org/member.php?114539-brownbear)) فکر کنم این نیست و می خواهند بعد از تعداد خاصی عدد یک ممیز بزنند که با این کد می شه:


If TextBox2.TextLength = 3 Then
TextBox2.Text += "/"
TextBox2.SelectionStart = TextBox2.TextLength
End Ifاگر همینه بگید تا ادامه بدیم.

pedram_ns
یک شنبه 05 دی 1389, 20:34 عصر
آقای نجاری یه چیز کوچولو رو فراموش کردید کد اخری رو اینطوری کامل کنید:


Me.TextBox1.Text = MaskNumbers(TextBox1.Text)
TextBox1.SelectionStart = TextBox1.TextLength

omid-vbAuto
یک شنبه 05 دی 1389, 21:05 عصر
آقای نجاری یه چیز کوچولو رو فراموش کردید کد اخری رو اینطوری کامل کنید:


Me.TextBox1.Text = MaskNumbers(TextBox1.Text)
TextBox1.SelectionStart = TextBox1.TextLength


بله حق باشماست.می تونید در مورد کد زیر یه کم بحث کنید وتوضیح بدید:




TextBox1.SelectionStart = TextBox1.TextLength

pedram_ns
دوشنبه 06 دی 1389, 12:20 عصر
این کد می گه بعد از انجام عمل مورد نظر (در اینجا اضافه کردن کاما به اعداد هست) مکان نما برای نوشتن در تکس باکس به اندازه طول کاراکترهای درون تکس باکس جلو بره. به زبان ساده تر مکان نما به آخر بره تا اعداد در ادامه اعداد قبلی نوشته بشه.
اگر این کد رو ننویسید بعد از وارد کردن چهار عدد مکان نما به اول تکس باکس میره و اگر بخواهید عدد رو ادامه بدید به هم می ریزه.

ali_najari
دوشنبه 06 دی 1389, 23:02 عصر
دوستان بجای اینکه از textLength استفاده کنید از Sendkey استفاده کنید بعد از کدهاتون!



Me.TextBox1.Text = MaskNumbers(TextBox1.Text)
Sendkeys.send("{End}")

brownbear
دوشنبه 06 دی 1389, 23:17 عصر
علتش اینه که شما دیگه خیلی مایه داری که 15 رقم مالی وارد می کنی!! :قهقهه:

نمی دونم برای خودم هم جالب بود بعد از 15 رقم به بعد مدام صفر وارد می کنه احتمالا به خاطر خصوصیت دستور FormatNumber هست. البته می تونید با کد نویسی خودتون بعد از هر سه رقم یک کاراکتر اضافه کنید.(این تاپیک رو قبل از دیدن تاپیک بالا نوشته بودم با بالایی کار کنید)

به هر حال فکر کنم مشکل این دوستمون(brownbear (http://barnamenevis.org/member.php?114539-brownbear)) فکر کنم این نیست و می خواهند بعد از تعداد خاصی عدد یک ممیز بزنند که با این کد می شه:


If TextBox2.TextLength = 3 Then
TextBox2.Text += "/"
TextBox2.SelectionStart = TextBox2.TextLength
End Ifاگر همینه بگید تا ادامه بدیم.


سلام
من منظورم از ممیز این بود

ate Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If TextBox1.TextLength = 2 Then
TextBox1.Text += "."
TextBox1.SelectionStart = TextBox1.TextLength
End If
من گفتم که نتونه بیشتر از یک ممیز وارد کنه ولی تو همه این کدها می شه هر چی خواست ممیز "." وارد کرد
من در key press برای جلوگیری از وارد کردن غیر عدد از این کد استفاده می کنم

If Not IsNumeric(e.KeyChar) And e.KeyChar <> Convert.ToChar(Keys.Back) And e.KeyChar <> Convert.ToChar(Keys.Delete) Then
e.Handled = True
End If
من الان مشکلم فقط در ممیز دومه

pedram_ns
سه شنبه 07 دی 1389, 09:16 صبح
این کد جلو کاراکترهای عددی و ورود ممیز به وسیله کاربر رو می گیره و بعد از وارد کردن دو عدد خودش ممیز رو وارد می کنه:


Private Sub TextBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress
If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back Then
e.Handled = True
End If

If TextBox4.TextLength = 2 Then
TextBox4.Text += "."
TextBox4.SelectionStart = TextBox4.TextLength
End If

End Sub

امیدوارم دیگه حل بشه

brownbear
سه شنبه 07 دی 1389, 16:12 عصر
سلام
این کد شما فقط بعد از دو عدد ممیز می زنه و کاربر نمی تونه خودش ممیز بزنه من گفتم مثلا بعد از 3 رقم برنامه ممیز بزنه و اگه کاربر خواست قبل از 3 رقم هم بتونه خودش ممیز بزنه ولی دو تا ممیز نگیره
مثلا 123.2 ولی اگه کاربر خواست بتونه 1.23 هم بزنه ولی دو تا ممیز رو نه
در ضمن این کد بعد از پاک کردن ممیز دیگه بقیه اعداد رو پاک نمی کنه فقط تاممیز را پاک می کنه

pedram_ns
سه شنبه 07 دی 1389, 17:16 عصر
این کد دیگه فکر کنم مشکل رو حل کنه.بعد از سه رقم ممیز می زنه قبل از اون هم خودتون می تونید ممیز بزنید و فقط یک ممیز در طول تکس باکس می زنه و حروف و کاراکترهای غیر عددی هم نمی گیره.


Private Sub TextBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress
If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back AndAlso e.KeyChar <> "." Or (InStr(TextBox4.Text, ".") <> 0 And e.KeyChar = ".") Then
e.Handled = True
End If

If TextBox4.TextLength = 3 And InStr(TextBox4.Text, ".") = 0 And e.KeyChar <> ControlChars.Back Then
TextBox4.Text += "."
TextBox4.SelectionStart = TextBox4.TextLength
End If
End Sub

brownbear
چهارشنبه 08 دی 1389, 10:29 صبح
سلام
با تشکر فکر کنم درست شده اگه مشکلی داشت می گم

ali_najari
پنج شنبه 09 دی 1389, 00:08 صبح
دوستان اگر از دستور Splite واسه این کار استفاده میکردید یکم بهتر و راحت تر بود

pedram_ns
پنج شنبه 09 دی 1389, 13:26 عصر
آقا علی نمونه خودتون رو بذارید به فیض برسیم (میدانه فیض نه ها!:لبخند:)

ali_najari
پنج شنبه 09 دی 1389, 15:32 عصر
چشم واستون يه نمونه خيلي ساده آماده ميكنم!

majidsoft
دوشنبه 04 بهمن 1389, 09:40 صبح
این کد دیگه فکر کنم مشکل رو حل کنه.بعد از سه رقم ممیز می زنه قبل از اون هم خودتون می تونید ممیز بزنید و فقط یک ممیز در طول تکس باکس می زنه و حروف و کاراکترهای غیر عددی هم نمی گیره.


Private Sub TextBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress
If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back AndAlso e.KeyChar <> "." Or (InStr(TextBox4.Text, ".") <> 0 And e.KeyChar = ".") Then
e.Handled = True
End If

If TextBox4.TextLength = 3 And InStr(TextBox4.Text, ".") = 0 And e.KeyChar <> ControlChars.Back Then
TextBox4.Text += "."
TextBox4.SelectionStart = TextBox4.TextLength
End If
End Sub

با سلام
آقا پدرام این کد شما یه اشکال کوچولو داره اگه کاربر بعد از زدن 3 عدد خودش تصادفی ممیز را بزنه برنامه دو تا ممیز را وارد می کنه که برای جلوگیری از این کار باید این تکه کد را بهش اضافه کنی و قبل از if آخری بذاری


If txtmb.TextLength =3 Then
If e.KeyChar = "." Then : e.Handled = True : End If
End If