PDA

View Full Version : سوال: چک کردن اینکه مقدار وارد شده در Textbox کاراکتر غیرعددی نداشته باشه



Nima_kyan
شنبه 25 شهریور 1391, 11:47 صبح
سلام
چطور میشه چک کرد که مقدار وارد شده در Textbox کاراکتر غیرعددی داره یا نه؟؟؟
نمیخوام از MaskedTextbox استفاده کنم.

Nima_kyan
شنبه 25 شهریور 1391, 13:31 عصر
یعنی واقعا کسی نیست بدونه چطور میشه این کار رو کرد؟؟؟ :متعجب:

Hajivandian
شنبه 25 شهریور 1391, 13:47 عصر
دلیل اینکه کسی پاسخ نمیده این نیست که کسی نمیدونه! بلکه این سوال شما بارها تو همین تالارها مطرح شده و سوال پیش پا افتاده ای محسوب میشه.

// نتیجه
bool dataValid = true;

// متن
string buffer = textBox1.Text;

// بررسی
foreach (char alpha in buffer)
{
if (!char.IsDigit(alpha))
{
dataValid = false;
return;
}
}

Mahmoud.Afrad
شنبه 25 شهریور 1391, 13:58 عصر
اگر میخواهید محتوای تکست باکس را به عدد تبدیل کنید int num;
try
{
num = int.Parse(textBox2.Text.Trim());
}
catch (System.FormatException formatEx)
{
//MessageBox.Show(formatEx.Message);
}
اگر catch انجام بشه یعنی محتوا خالی و یا شامل کاراکتر غیرعددی بوده.

Nima_kyan
شنبه 25 شهریور 1391, 14:27 عصر
ممنون بابت راهنماییتون.
حالا من این کد رو واسه Textbox یی که به گرید اضافه کردم به شکل زیر استفاده کردم ولی خطا میده...

private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
bool dataValid = true;
if (e.ColumnIndex == 0)
{
string buffer = dataGridView1[0, e.RowIndex].Value.ToString();
foreach (char alpha in buffer)
{
if (!char.IsDigit(alpha))
{
dataValid = false;
return;
}
}
if (dataValid == false)
dataGridView1.CurrentCell.ErrorText = "مقدار این فیلد باید از نوع عددی باشد";
}
}
اینم خطاش

Object reference not set to an instance of an object.

Nima_kyan
شنبه 25 شهریور 1391, 14:31 عصر
خطا رو از خط شماره 6 کد بالا میگیره...

Mahmoud.Afrad
شنبه 25 شهریور 1391, 15:56 عصر
میتونید با یک ترفند رویدادهای تکست باکس را برای سلول گریدویو بسازید
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex == dataGridView1.Columns["Column1"].Index)
{
TextBox txt = e.Control as TextBox;
txt.KeyPress += new KeyPressEventHandler(txt_KeyPress);
}
}
void txt_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar));
}

به جای Column1 نام ستون مورد نظر را بذارید.
در رویداد EditingControlShowing میتونید سلول مورد نظر را با استفاده از e به کنترلهای دیگر مثلا تکست باکس و یا کمبوباکس و ... کست کنید تا بتونید رویدادهای کنترلهای دیگر رو شبیه سازی کنید.

Nima_kyan
شنبه 25 شهریور 1391, 16:35 عصر
مرسي mafaman2003.
ترفندت عالي بود. رويداد KeyPress به خوبي كار ميكنه ولي تو روبداد TextChanged هميشه قسمت Catch اجرا ميشه.(عدد وروديم هم در بازه int هستش). نميدونم چرا؟؟!

Mahmoud.Afrad
شنبه 25 شهریور 1391, 22:37 عصر
TextChanged حذف کن. پست قبل رو آپدیت کردم.
همون KeyPress کافیه و فقط عدد دریافت میکنه. البته اگر بخواهید از متنی را کپی و داخل سلول پست کنید باید از رویدادهای دیگر گریدویو استفاده کنید و با try .. catch که قبلا گفتم تشخیص بدی.