PDA

View Full Version : سوال: گرفتن فقط عدد بین 2 الی 8 در تکست باکس



qartallar
پنج شنبه 30 بهمن 1393, 16:17 عصر
نحوه گرفتن عدد در تکست باکس سی شارپ بین اعداد 2 تا 8 نه متن بگیرد و مثلا 9 نگیرد

Mani_rf
پنج شنبه 30 بهمن 1393, 16:28 عصر
از کنترل Number Up Down استفاده کن

mrprestige
پنج شنبه 30 بهمن 1393, 16:30 عصر
سلام دوست من شما میتونین توی رویداد Keypress مربوط به textbox تون این کد رو بنویسید



if((e.KeyChar>='2'&& e.KeyChar<='8')||(e.KeyChar==(char)Keys.Back))
{
e.Handled = false;


}
else
{
e.Handled=true;
}



موفق باشید

qartallar
پنج شنبه 30 بهمن 1393, 16:30 عصر
از کنترل Number Up Down استفاده کن

خیلی ممنون این یک راهشه ولی کدی باشه که تو تکست باکس بنویسیم و عمل کنه

qartallar
پنج شنبه 30 بهمن 1393, 16:34 عصر
سلام دوست من شما میتونین توی رویداد Keypress مربوط به textbox تون این کد رو بنویسید



if((e.KeyChar>='2'&& e.KeyChar<='8')||(e.KeyChar==(char)Keys.Back))
{
e.Handled = false;


}
else
{
e.Handled=true;
}



موفق باشید

با تشکر از جواب شما
این خوب بود ولی احتمالا من سوالم رو درست نپرسیدم
در این کد که شما نوشتین اعداد زیادی میگیره منظورم این بود فرضاً ما بازه اعداد مشخص کنیم مثلا از 1 تا 40 بتونه تایپ کنه اگه 41 بزنه ننویسه

mrprestige
پنج شنبه 30 بهمن 1393, 16:36 عصر
یعنی منظورتون اینه که خودتون بازه رو تعیین کنید تو برنامه؟

qartallar
پنج شنبه 30 بهمن 1393, 16:37 عصر
یعنی منظورتون اینه که خودتون بازه رو تعیین کنید تو برنامه؟

بله دقیقا

mrprestige
پنج شنبه 30 بهمن 1393, 16:43 عصر
خب اینطوری تغییرش بده



char a = Convert.ToChar(textBox2.Text);
char b = Convert.ToChar(textBox3.Text);
if((e.KeyChar>=a && e.KeyChar<=b)||(e.KeyChar==(char)Keys.Back))
{
e.Handled = false;


}
else
{
e.Handled=true;
}



داخل textbox2 تعیین میکنید از چه شماره ای و توی textbox3 تعیین میکنید تا چه شماره ای

qartallar
پنج شنبه 30 بهمن 1393, 17:00 عصر
خب اینطوری تغییرش بده



char a = Convert.ToChar(textBox2.Text);
char b = Convert.ToChar(textBox3.Text);
if((e.KeyChar>=a && e.KeyChar<=b)||(e.KeyChar==(char)Keys.Back))
{
e.Handled = false;


}
else
{
e.Handled=true;
}



داخل textbox2 تعیین میکنید از چه شماره ای و توی textbox3 تعیین میکنید تا چه شماره ای

ممنون از پاسختون این کار کرد ولی فقط char عدد یک رقمی قبول میکنه
برای اعداد 2 رقمی ارور میده

در ضمن اصلا جواب با سئوال من درست نیست!
چرا ؟ چون در این کد میشه 2 الی 8 نوشت ولی به هر تعداد مثلا بنویسی 2546228 یا 2 یا 88 اما من میخوام فقط بین 2 تا 8 بگیره یعنی طرف نتونه 33 بزنه

golbafan
پنج شنبه 30 بهمن 1393, 17:43 عصر
سلام
شما باید از maskedtextbox استفاده کنید و در فرمت اون تغییر بدید:

مثلا: ^[2-8]+$

sajadsobh
پنج شنبه 30 بهمن 1393, 17:59 عصر
خاصیت MaxLength از اون تکست باکس رو روی 1 ست کن. بعد داخل رویداد KeyPress از اون تکست باکس این قطعه کد رو بنویس:

string[] nums = {"2", "3", "4", "5", "6", "7", "8"};
if ((!char.IsDigit(e.KeyChar) && (Keys)e.KeyChar != Keys.Back) || (!nums.Contains(e.KeyChar.ToString())))
{
e.Handled = true;
}

golbafan
پنج شنبه 30 بهمن 1393, 18:02 عصر
خاصیت MaxLength از اون تکست باکس رو روی 1 ست کن. بعد داخل رویداد KeyPress از اون تکست باکس این قطعه کد رو بنویس:

string[] nums = {"2", "3", "4", "5", "6", "7", "8"};
if ((!char.IsDigit(e.KeyChar) && (Keys)e.KeyChar != Keys.Back) || (!nums.Contains(e.KeyChar.ToString())))
{
e.Handled = true;
}

سلام
در سوال دوستمون اومده که ممکنه عدد بین 5 تا 85000 باشه مثلا (بازه دلخواهه)
فکر نمیکنم روش شما بهینه باشه

بهتره از maskedtextbox استفاده بشه

sajadsobh
پنج شنبه 30 بهمن 1393, 18:16 عصر
"من میخوام فقط بین 2 تا 8 بگیره یعنی طرف نتونه 33 بزنه"
نقل قول از طرف دوستمونه!

golbafan
پنج شنبه 30 بهمن 1393, 18:26 عصر
"من میخوام فقط بین 2 تا 8 بگیره یعنی طرف نتونه 33 بزنه"
نقل قول از طرف دوستمونه!

سلام
شما درست گفتید من پست 9 رو برعکس برداشت کردم

qartallar
جمعه 01 اسفند 1393, 09:04 صبح
سلام
شما درست گفتید من پست 9 رو برعکس برداشت کردم

دوستان محترم بازم ممنون از راهنماییهاتون
اما من چرا نتونستم منظورمو برسونم شما فرض کنید بازه ای که ما میدیم دست برنامه نویس باشه اما فرضا 2 تا 8 مثال بود
شاید تغییر کنه به 2 تا 16 نکته اینجاست که تکست باکس فقط دورقمی بگیره و بین بازه ای که خودمون تعریف میکنیم

در همه این کدها کارایی وجود داره اما هدف اونا نیستن
تکست باکسی که یک بازه ای رو بگیره از 2 تا 16 فرضا 17 بزنه قبول کنه اما 7 بزنه مشکلی نیست

Share & Learn
جمعه 01 اسفند 1393, 11:53 صبح
دوستان محترم بازم ممنون از راهنماییهاتون
اما من چرا نتونستم منظورمو برسونم شما فرض کنید بازه ای که ما میدیم دست برنامه نویس باشه اما فرضا 2 تا 8 مثال بود
شاید تغییر کنه به 2 تا 16 نکته اینجاست که تکست باکس فقط دورقمی بگیره و بین بازه ای که خودمون تعریف میکنیم

در همه این کدها کارایی وجود داره اما هدف اونا نیستن
تکست باکسی که یک بازه ای رو بگیره از 2 تا 16 فرضا 17 بزنه قبول کنه اما 7 بزنه مشکلی نیست

فرض کنیم می خواین عدد از 40 بیشتر نشه
می تونید اینجوری بنویسید:

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (Convert.ToInt32(textBox1.Text) >= 40)
{
textBox1.Text = "40";
textBox1.SelectionStart = textBox1.Text.Length;
}
}

اگه دقیقا این مد نظرتون نیست همین روش رو می تونید تعمیم بدید تا دقیقا بشه چیزی که مدنظرتونه
موفق باشید :)

golbafan
شنبه 02 اسفند 1393, 09:51 صبح
پس بهترین راه حل استفاده از numericupdown هست و تنظیم min و max اون توسط کاربر

qartallar
یک شنبه 03 اسفند 1393, 20:57 عصر
فرض کنیم می خواین عدد از 40 بیشتر نشه
می تونید اینجوری بنویسید:

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (Convert.ToInt32(textBox1.Text) >= 40)
{
textBox1.Text = "40";
textBox1.SelectionStart = textBox1.Text.Length;
}
}

اگه دقیقا این مد نظرتون نیست همین روش رو می تونید تعمیم بدید تا دقیقا بشه چیزی که مدنظرتونه
موفق باشید :)

خیلی ممنون دوست عزیز جواب شما درست بود و منظور من دقیقا این بود خیلی متشکرم
و تشکر از بقیه دوستان که زحمت کشیدن جواب دادن

NASA's Spaceman
دوشنبه 04 اسفند 1393, 10:10 صبح
private void textBox1_TextChanged(object sender, EventArgs e) {
int a = Convert.ToInt32(textBox1.Text);
if (a > 8)
{
a = 8;
textBox1.Text = a.ToString();
}
}
با سپاس Spaceman