PDA

View Full Version : چگونه می توان کنترل کرد که در combobox فقط عدد وارد شود ؟



ali_mp64
چهارشنبه 14 فروردین 1387, 16:48 عصر
سلام دوستان
می خواستم ببینم چطور می تونیم کنترل کنیم که کاربر توی combobox فقط عدد وارد کنه ؟
ممنون

alaaaa
چهارشنبه 14 فروردین 1387, 19:02 عصر
در KeyPress کنترل comboBox کد زیر رو بنویس



if (e.KeyChar < 48 || e.KeyChar > 57)
{
e.KeyChar='\0';
}
کد بالا چک می کنه که اگر کاراکتر ورودی در رنج کاراکتر های عددی نباشه ورودی را null کنه

HosseinProgrammer
چهارشنبه 14 فروردین 1387, 19:10 عصر
می توانید در رویداد KeyPress ، تعیین کنید که چه کاراکترهایی را کاربر می تواند تایپ کند. در زیر می گوییم هر چیزی که عدد و دکمه BackSpace نبود رو فیلتر کن.



privatevoid comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back;
}


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


try
{
long.Parse(comboBox1.Text);
}
catch
{
MessageBox.Show("Error");
}


اگر در تبدیل رشته به عدد خطایی روی دهد یعنی اینکه نوشته تایپ شده حاوی کاراکتر غیر عددی است.

----------------------------------------------------
کد زیر هم برای رویداد KeyPress یک TextBox نوشته شده که فقط می توان در این تکس باکس، عدد اعشاری صحیح وارد کرد. (+ یا - فقط در ابتدا و یکبار ، علامت دات . فقط یکبار ، حتی اگر شما قسمتی که مثلا + داره رو Select کنید می تونید تغییرش بدید ولی اگر قسمت Select شده حاوی + نباشه و + قبلا وارد شده باشه، دیگر اجازه وارد کردن + جدید ندارید.)
این هم هدیه ای از من به شما ! با تشکر!



privatevoid textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back &&
e.KeyChar != '.' && e.KeyChar != '-' && e.KeyChar != '+';
// ںگ© کé ê¢ë ں뢦ں 묧ى ی§
// چیë ںگ© ê¢ë ں뢦ں ¬§ى ں¬§ ںی§ ںیë §ی مéںê¢ پ¨ی©ه¢ى ¬ی§. ھی©ں ê¢ë پںک ¦یںى§ ¬§
if (textBox1.SelectedText != textBox1.Text)
{
if (e.KeyChar == '.')
{
try
{
// ںی§ ¢یںë پ« ںھ + یں - مéںê¢ ںم¬ں© ©ں یں©§ ک©§
if (textBox1.Text != "+" && textBox1.Text != "-" && textBox1.Text != "")
{
// ںگ© ¦لں ©یی §ى§ یمëی §© ê¢ë یک ں© مéںê¢ ںم¬ں© یں©§ ¬§ى. پ« ë ںی§ §ی ں©ى یں©§ ¬ی§
long.Parse(textBox1.Text);
}
}
catch
{
e.Handled = e.KeyChar == '.';
}
}
elseif (e.KeyChar == '+' || e.KeyChar == '-')
{
// ©ںی ک뢩é '+' یں '-' ¢ک©ں©ی §© ں ¢§ںی کں§© ê¢ë
// ںیë §ی مéںê¢ ¥¢êں ںی§ §© ں ¢§ںی ê¢ë یں©§ ¬ی§
// ںگ© ç«ê¢ی ںھ ê¢ë ں뢦ں ¬§ى ں¬§ کى ¬ںêé ê£ ¢ یں êëهی ں«¢، ںی§ ںیë §ی مéںê¢ §© ںیë ¥ںé¢ پ¨ی©ه¢ى ¬ی§
if ((String.Compare(textBox1.Text, 0, "+", 0, 1) == 0 ||
String.Compare(textBox1.Text, 0, "-", 0, 1) == 0 ||
textBox1.SelectionStart != 0) &&
(String.Compare(textBox1.SelectedText, 0, "+", 0, 1) != 0 &&
String.Compare(textBox1.SelectedText, 0, "-", 0, 1) != 0))
{
e.Handled = e.KeyChar == '+' || e.KeyChar == '-';
}
}
}
}

HosseinProgrammer
چهارشنبه 14 فروردین 1387, 19:12 عصر
انگار یکی زودتر جواب داد!! :لبخند:

piroozman
چهارشنبه 14 فروردین 1387, 20:15 عصر
با سلام خدمت شما
من در یک پروژه به صورت زیر عمل کرده ام
ابتدا در یک کلاس دو تابع به شکل زیر ایجاد کرده ام:
کد:


//تابع زیر نوع کاراکتر ارسال شده به تاکس باکهاسی مشخص شده توسط شما را تعیین می کند
public static void determineTypeOfCharacter(object sender,KeyEventArgs e)
{
// Initialize the flag to false.
nonNumberEntered = false;
// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
// Determine whether the keystroke is a number from the keypad.
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
// Determine whether the keystroke is a backspace.
if (e.KeyCode != Keys.Back)
{
if(e.KeyCode!=Keys.Decimal)
// A non-numerical keystroke was pressed.
// Set the flag to true and evaluate in KeyPress event.
nonNumberEntered = true;
}
}
}
}
//تابع زیر از ورود کاراکترهای غیر مجاز در داخل تکس باکسهای مورد نظر شما جلوگیری می کند
public static void preventCharacterEnter(object sender,KeyPressEventArgs e)
{
// Check for the flag being set in the KeyDown event.
if (nonNumberEntered == true)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true;
System.Media.SystemSounds.Beep.Play();

}
}
سپس در طول برنامه برای هر یک از کامپوننتهایی که قصد دارید کاربر فقط اعداد را وارد کند باید پارامترهای دو رویداد keydown و keypress را به دو تابع فوق ارسال نمایید. به شکل زیر:


private void rangeareaTextBox_KeyDown(object sender, KeyEventArgs e)
{
Tools.determineTypeOfCharacter(sender, e);
}
private void rangeareaTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
Tools.preventCharacterEnter(sender, e);
}

ali_mp64
پنج شنبه 15 فروردین 1387, 01:25 صبح
ممنون از همه شما .
کارم راه افتاد