PDA

View Full Version : محدود کردن Textbox به وارد کردن بین دو عدد



Barbodben
یک شنبه 13 مهر 1393, 23:54 عصر
سلام
کسی میدونه چجوری میشه Textbox رو محدود کرد که فقط یک بازه مشخص از اعداد رو بگیره ؟
مثلا اگر ما مد نظرمون اعداد بین 10 تا 100 باشه تا صفر دوم 100 رو بتونیم تایپ کنیم، ولی اگه کاربر خواست 1 رو بزنه دیگه ازش قبول نکنه و فقط کرسر همونجوری سرجاش منتظر وارد کردن عدد باشه

gilsoft
دوشنبه 14 مهر 1393, 06:46 صبح
سلام
کسی میدونه چجوری میشه Textbox رو محدود کرد که فقط یک بازه مشخص از اعداد رو بگیره ؟
مثلا اگر ما مد نظرمون اعداد بین 10 تا 100 باشه تا صفر دوم 100 رو بتونیم تایپ کنیم، ولی اگه کاربر خواست 1 رو بزنه دیگه ازش قبول نکنه و فقط کرسر همونجوری سرجاش منتظر وارد کردن عدد باشه

سلام دوست عزیز

اینم کد مربوطه:

Private _minValue As Long = 0
Private _maxValue As Long = Long.MaxValue
Private _Value As Long = 0


Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
_minValue = 10
_maxValue = 100
TextBox1.MaxLength = _maxValue.ToString.Length
End Sub


Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim uc As Globalization.UnicodeCategory = Char.GetUnicodeCategory(e.KeyChar)
Select Case uc
Case Globalization.UnicodeCategory.DecimalDigitNumber, Globalization.UnicodeCategory.Control
Case Else
e.Handled = True
End Select
End Sub


Private Sub TextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
_Value = Val(TextBox1.Text.Trim)
If (_Value < _minValue Or _Value > _maxValue) Then
MessageBox.Show("خارج از محدوده")
e.Cancel = True
End If
End Sub

موفق باشید .....

behrooz69
سه شنبه 15 مهر 1393, 02:33 صبح
علاوه بر تشکر از دوست خوبم مهندس محرابی
شما میتونید از روش کاملا ساده بهره ببرید

یه کنترل NumericUpDown به صفحه خودتون اضافه کنید

minimum رو روی 0
maximum رو روی 100
تنظیم کنید با اینکار با ورود عدد و اینتر تایید انجام شده اگه مثلا 120 وارد کنن و اینتر بزنن همون 100 نوشته میشه .

یا حق

Barbodben
چهارشنبه 16 مهر 1393, 13:08 عصر
اول از همه از شما دو عزیز تشکر میکنم بابت جواب دادن سوال :قلب:

جناب محرابی: راه حل شما درست بود ولی مسئله ای که بود اینه که کاربر میتونست مثلا عدد 1 یا 999 رو وارد کنه و فقط زمان خارج شدن فوکوس تکس باکس پیغام رو نشون میداد، که منظور من بیشتر این بود که یوزر حتی نتونه عدد 101 رو وارد کنه.



behrooz69: روش شما هم خیلی کارآمد بود ولی مشکلش این بود که اعدادو فقط زمان اینتر زدن تصحیح میکرد و دوم اینکه میخواستم ترجیحا تکست باکسم اون دوتا فلش بالا و پایینو نداشته باشه، که متاسفانه با این کنترل نمیشه کاریش کرد

behrooz69
پنج شنبه 17 مهر 1393, 01:31 صبح
میشه ورش داشت خوب دوست من توی وی بی دات نت چیزی غیر ممکن نیست فقط یعی و تلاش میخواد

این کد رو توی رویداد Form Load بنویس

هر شی یک کنترل داره که میشه بهش دسترسی پیدا کرد .

NumericUpDown1.Controls.Item(0).Visible = False


فقط شما تنها کاری که میکنی بگرد ببین میتونی کدی پیدا کنی که نذاره عدد بیشتر از 100 وارد کنه یا نه

gilsoft
پنج شنبه 17 مهر 1393, 06:29 صبح
اول از همه از شما دو عزیز تشکر میکنم بابت جواب دادن سوال :قلب:

جناب محرابی: راه حل شما درست بود ولی مسئله ای که بود اینه که کاربر میتونست مثلا عدد 1 یا 999 رو وارد کنه و فقط زمان خارج شدن فوکوس تکس باکس پیغام رو نشون میداد، که منظور من بیشتر این بود که یوزر حتی نتونه عدد 101 رو وارد کنه.

سلام دوست عزیز

این قطعه کد رو به کدهای پست 2# اضافه کن:

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
_Value = Val(TextBox1.Text.Trim)
If _Value > _maxValue Then
MessageBox.Show("خارج از محدوده")
TextBox1.Focus()
End If
End Sub


و یا بجای کد فوق .. قطعه کد رویداد KeyPress پست 2# رو به شکل زیر تغییر بده:


Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim uc As Globalization.UnicodeCategory = Char.GetUnicodeCategory(e.KeyChar)
_Value = Val(TextBox1.Text.Trim & e.KeyChar)
Select Case uc
Case Globalization.UnicodeCategory.DecimalDigitNumber, Globalization.UnicodeCategory.Control
If _Value > _maxValue Then
MessageBox.Show("خارج از محدوده")
e.Handled = True
End If
Case Else
e.Handled = True
End Select
End Sub


لازم بذکر است که: رفتار این دو Event باهم متفاوت هستش ......

موفق باشید .....