PDA

View Full Version : مدیریت بر روی ورود داده به textbox



mohammad2407
سه شنبه 01 اسفند 1391, 18:13 عصر
سلام دوستان عزیز خسته نباشید

من یک تکس باکس دارم که میخوام دو کارکتر اول حروف بگیره و بعد دیگه حروف نگیره و فقط عدد بگیره

ordebehesht
سه شنبه 01 اسفند 1391, 19:37 عصر
این که کاری نداره

یه متغیر بگیر برابر 2 کن در هر ورود طول مقدار ورودی رو چک کن ببین برابر 0 شده اگه آره ممنونعیت بده به ورودی حرف ولی نه از متغیر یه واحد کم کن میتونی از while استفاده کنی تو textchang تکس باکست

mohammad2407
سه شنبه 01 اسفند 1391, 21:28 عصر
من متوجه نشدم :لبخند:

mohammad2407
سه شنبه 01 اسفند 1391, 22:40 عصر
خب راهنمایی کنید دیگه ؟

csharpdoost
چهارشنبه 02 اسفند 1391, 08:57 صبح
سلام دوستان عزیز خسته نباشید

من یک تکس باکس دارم که میخوام دو کارکتر اول حروف بگیره و بعد دیگه حروف نگیره و فقط عدد بگیره


string substr1 = "", substr2 = "";//
textBox1.Text.ToLower();

substr1 = textBox1.Text.Substring(0, 1);
substr2 = textBox1.Text.Substring(1, 1);

if ((substr1 == "0" || substr2 == "0") || (substr1 == "1" || substr2 == "1") || (substr1 == "2" || substr2 == "2") ||
(substr1 == "3" || substr2 == "3") || (substr1 == "4" || substr2 == "4") || (substr1 == "5" || substr2 == "5") ||
(substr1 == "6" || substr2 == "6") || (substr1 == "7" || substr2 == "7") ||
(substr1 == "9" || substr2 == "9") || (substr1 == "8" || substr2 == "8"))
{
textBox1.Text = "";
MessageBox.Show("خطا");
return;
}

string substr = "";
for (int sub = 2; sub < textBox1.Text.Length; sub++)
{
substr = textBox1.Text.Substring(sub, 1);

if (substr != "0" && substr != "1" && substr != "2" && substr != "3" && substr != "4" && substr != "5" && substr != "6" &&
substr != "7" && substr != "8" && substr != "9")
{
textBox1.Text = "";
MessageBox.Show("خطا");
return;
}
}
textBox1.Text = "";
MessageBox.Show("ok");

مهرداد صفا
چهارشنبه 02 اسفند 1391, 10:07 صبح
سلام دوستان عزیز خسته نباشید

من یک تکس باکس دارم که میخوام دو کارکتر اول حروف بگیره و بعد دیگه حروف نگیره و فقط عدد بگیره


سلام.
در رویداد KeyPress مربوط به Textbox مورد نظر، برای دو کاراکتر اول در صورت غیر حرفی بودن و برای کاراکتر های بعدی در صورت غیر عددی بودن مقدار E.Handled را برابر true کنید تا کاراکتر فشرده شده تایپ نشود. به این صورت:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (textBox1.Text.Length <= 1)
{
if (!(char.IsLetter(e.KeyChar)))
{
e.Handled=true;
System.Media.SystemSounds.Beep.Play();
}

}
else{
if (!(char.IsDigit(e.KeyChar)))
{
e.Handled=true;
System.Media.SystemSounds.Beep.Play();
}
}
}

البته درست تر این است که محل قرار گیری caret را با استفاده از StartSelection به دست بیاورید و بر اساس آن عمل کنید، چون ممکن است کاربر بخواهد به عقب برگردد و متن را ویرایش کند.

mohammad2407
چهارشنبه 02 اسفند 1391, 10:51 صبح
کد شما از هر نظر عالی هست فقط تنها مشکلی که داره این هست که ویرایش نمیشه باید برنامه ببندم دوباره باز کنم :لبخند:

csharpdoost
چهارشنبه 02 اسفند 1391, 10:51 صبح
سلام.
در رویداد KeyPress مربوط به Textbox مورد نظر، برای دو کاراکتر اول در صورت غیر حرفی بودن و برای کاراکتر های بعدی در صورت غیر عددی بودن مقدار E.Handled را برابر true کنید تا کاراکتر فشرده شده تایپ نشود. به این صورت:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (textBox1.Text.Length <= 1)
{
if (!(char.IsLetter(e.KeyChar)))
{
e.Handled=true;
System.Media.SystemSounds.Beep.Play();
}

}
else{
if (!(char.IsDigit(e.KeyChar)))
{
e.Handled=true;
System.Media.SystemSounds.Beep.Play();
}
}
}

البته درست تر این است که محل قرار گیری caret را با استفاده از StartSelection به دست بیاورید و بر اساس آن عمل کنید، چون ممکن است کاربر بخواهد به عقب برگردد و متن را ویرایش کند.

مطمئنن این کد حرفه ای تر می باشد. اما به نظر بنده به روش کپی و پیست با ماوس به مشکل برمیخورد که باید برای ماوس هم کنترل نماییم.

mohammad2407
چهارشنبه 02 اسفند 1391, 11:03 صبح
یک سری تغییرات دادم درست شد از همه ممنون

کپی و پیست هم مشکلی نداره:چشمک:

miciii
سه شنبه 22 مرداد 1392, 00:48 صبح
سلام
دوستان چطور میشه با توابع خود سی شارپ (نمیدونم درست گفتم :لبخند:) این ورود اطلاعات رو کنترل کرد من این دستور های زیر رو میزنم اما فقط دستور آخر اجرا میشه چیکار کنم که همه این کنترل ها انجام شه:لبخندساده:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = char.IsDigit(e.KeyChar);
e.Handled = char.IsPunctuation(e.KeyChar);
e.Handled = char.IsSymbol(e.KeyChar);
}

مهرداد صفا
سه شنبه 22 مرداد 1392, 01:41 صبح
سلام
دوستان چطور میشه با توابع خود سی شارپ (نمیدونم درست گفتم :لبخند:) این ورود اطلاعات رو کنترل کرد من این دستور های زیر رو میزنم اما فقط دستور آخر اجرا میشه چیکار کنم که همه این کنترل ها انجام شه:لبخندساده:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = char.IsDigit(e.KeyChar);
e.Handled = char.IsPunctuation(e.KeyChar);
e.Handled = char.IsSymbol(e.KeyChar);
}


با سلام.
طبیعاتا حتی اگر در صورتیکه مورد اول true برگرداند، با false بودن آخرین مورد نتیجه false می شود.
شما باید از عملگر "|" استفاده کنید:

e.Handled=(Char.IsDigit(e.KeyChar)||Char.IsPunctua tion(e.KeyChar)||Char.IsSymbol(e.KeyChar));