PDA

View Full Version : سوال: textbox ای که فقط اعداد 1تا8 (تک رقمی)و کاراکتر '-' را بپذیرد



دلتنگ اسمان
سه شنبه 24 تیر 1393, 21:31 عصر
با سلام.
تکس باکسی که بتوان اعداد تک رقمی از1 تا8 رو و کاراکتر '-' را بپذیرد. البته نوشتم فقط مشکلم اینکه وقتی اعداد در تکس باکس دو رقمی میشه پیغام نمیده و وقتی سه رقمی میشه پیغام خطا میده.میخوام دو رقمی نشه.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{

char keyChar = e.KeyChar;

if (!(char.IsDigit(e.KeyChar) || keyChar == 45 || keyChar == 8))
{
e.Handled = true;
}
else
{

string[] dash = new string[textBox1.Text.Length];
dash = textBox1.Text.Split('-');
if (dash.Length <= 1 && textBox1.Text.Length>0)
if(Convert.ToInt32(textBox1.Text) > 8 || Convert.ToInt32(textBox1.Text) < 1)
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
return;
}
for (int t = 0; t < dash.Length ; t++)
{
if (Convert.ToInt32(dash[t]) > 8 || Convert.ToInt32(dash[t]) < 1)
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
return;
}
}
}

}

Pedram_Parsian
سه شنبه 24 تیر 1393, 22:23 عصر
خوب همون اول با lenght تکس باکست شرط قرار بده ....

ro3vayedel
سه شنبه 24 تیر 1393, 23:47 عصر
خدمت شما...

دلتنگ اسمان
چهارشنبه 25 تیر 1393, 07:21 صبح
خدمت شما...
ممنون. ولی فقط عد تک رقمی رو قبول میکنه و کاراکتر '-' رو نمیپذیره.و در ضمن این تکس باکس رو چطوری به پروژه ام اضافه کنم.

دلتنگ اسمان
چهارشنبه 25 تیر 1393, 07:36 صبح
به این صورت نوشتم جواب داد اگه کسی بهتر از این میتونه(مطمئنن میشه نوشت) بنویسه لطفا راهنمایی کنه . ممنون

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{

char keyChar = e.KeyChar;

if (!(char.IsDigit(e.KeyChar) || keyChar == 45 || keyChar == 8))
{
e.Handled = true;
}

}

private void textBox1_TextChanged(object sender, EventArgs e)
{
string[] dash = new string[textBox1.Text.Length];
dash = textBox1.Text.Split('-');
if (dash.Length <= 1 && textBox1.Text.Length > 0)
if (Convert.ToInt32(textBox1.Text) > 8 || Convert.ToInt32(textBox1.Text) < 1)
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
textBox1.Text = "";
return;
}
for (int t = 0; t < dash.Length; t++)
{
if (dash[t] == "") continue;
if (Convert.ToInt32(dash[t]) > 8 || Convert.ToInt32(dash[t]) < 1)
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
textBox1.Text = "";
return;
}
}

}

abbas.oveissi
چهارشنبه 25 تیر 1393, 08:31 صبح
میگم اینجوری که من درست کردم،حالت های شما رو پوشش میده؟؟موقع تست حواستون باشه هر دو Event تغییر کردند.
private void textBox1_TextChanged(object sender, EventArgs e) {
string reg = "[1-9]{2}";
if (Regex.IsMatch(textBox1.Text, reg))
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
textBox1.Text = "";
return;
}
}


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char keyChar = e.KeyChar;
if (!((keyChar>=49&&keyChar<=56) || keyChar == 45 || keyChar == 8))
{
e.Handled = true;
}
}

دلتنگ اسمان
چهارشنبه 25 تیر 1393, 11:53 صبح
میگم اینجوری که من درست کردم،حالت های شما رو پوشش میده؟؟موقع تست حواستون باشه هر دو Event تغییر کردند.
private void textBox1_TextChanged(object sender, EventArgs e) {
string reg = "[1-9]{2}";
if (Regex.IsMatch(textBox1.Text, reg))
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
textBox1.Text = "";
return;
}
}


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char keyChar = e.KeyChar;
if (!((keyChar>=49&&keyChar<=56) || keyChar == 45 || keyChar == 8))
{
e.Handled = true;
}
}

ممنون از توجهتون.
مشکلش اینکه عدد9 رو هم قبول میکنه.

abbas.oveissi
چهارشنبه 25 تیر 1393, 17:53 عصر
ببخشید من لپ تاب پیشم نیست اما فکرکنم صبح چک کردم قبول نمیکرد.به جای isDigit شما هم از بازه ای که من دادم استفاده کردید؟؟چون ۹ بین ۴۹ تا ۵۶ نیست برای همین اصن نباید تایپ بشه

مهرداد صفا
چهارشنبه 25 تیر 1393, 18:05 عصر
سلام.


textBox.MaxLength=1;

دلتنگ اسمان
چهارشنبه 25 تیر 1393, 18:10 عصر
ببخشید من لپ تاب پیشم نیست اما فکرکنم صبح چک کردم قبول نمیکرد.به جای isDigit شما هم از بازه ای که من دادم استفاده کردید؟؟چون ۹ بین ۴۹ تا ۵۶ نیست برای همین اصن نباید تایپ بشه

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

دلتنگ اسمان
چهارشنبه 25 تیر 1393, 18:10 عصر
سلام.


textBox.MaxLength=1;
در تکس باکس میشه اینجوری هم تایپ کرد : 4-5-6-7

abbas.oveissi
چهارشنبه 25 تیر 1393, 18:27 عصر
بابا من الان پای لپتاب هستم و دوباره تست کردم،اصن 9 قبول نمیکنه:لبخند:من براتون فایل exe و کد رو ضمیمه کردم

دلتنگ اسمان
پنج شنبه 26 تیر 1393, 07:10 صبح
ممنون. درسته

Pedram_Parsian
پنج شنبه 26 تیر 1393, 09:08 صبح
یه راه ساده تر هم وجود داره که بیای آخرین حرف تکس باکست رو بریزی توی یه متغیر و هر دفعه چک کنی که اگه - بود فقط عدد چاپ کنه و اگه نبود هم e.Handled رو برابر true کنه ...
فکر کنم این راحت تر باشه

fakhravari
پنج شنبه 26 تیر 1393, 10:41 صبح
http://www.vcskicks.com/numbers_only_textbox.php
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
if (!System.Text.RegularExpressions.Regex.IsMatch(e.K eyChar.ToString(), @"([1-8]|-)+"))
e.Handled = true;
}

ro3vayedel
پنج شنبه 26 تیر 1393, 16:34 عصر
ممنون. ولی فقط عد تک رقمی رو قبول میکنه و کاراکتر '-' رو نمیپذیره.و در ضمن این تکس باکس رو چطوری به پروژه ام اضافه کنم.

خودتون گفتید تک رقمی رو فقط بپذیره...
dll رو واستون میفرستم add کنید به toolbox
توی پراپرتیس این textbox میتونید تعیین کنید که چه ورودی بگیره
مثلا فقط فارسی دریافت کنه type Farsi Only رو true کنید...
فقط انگلیسی دریافت کنه
فقط عدد دریافت کنه
فقط چند کاراکتر خاص رو دریافت کنه
توی TypeOderChar هرکاراکتری که میخواید رو تایپ کنید... مثلا & یا - یا " ...هرچیزی که میخواید رو پشت سر هم تو این قسمت وارد کنید.
همه گزینه ها را false کن و فقط TypeOderChar رو فعال کن ...واسه فعال کردنش توی پراپرتیس تکست باکس توی قسمت TypeOderChar اینو وارد کن 12345678-
این یعنی فقط یک تا هشت و کاراکتر منفی رو دریافت کن...
واسه دو رقمی شدن هم همه بچه ها گفتن محدودش کن به تک رقمی...

mustafa4435
جمعه 24 مرداد 1393, 15:33 عصر
دوستان سلام
من یک کاربر تازه کار هستم
یک فرم در vb.net طراحی کردم و میخوام در قسمت کدملی اگر اعداد کمتر از 10 رقم یا بیشتر بود تکست باکسم تغییر رنگ بده و قرمز بشه
لطفا راهنماییم کنید فوری هست.