PDA

View Full Version : سوال: نحوه تشخیص نوع ورودی؟



senior.sina
سه شنبه 15 فروردین 1391, 20:30 عصر
سلام

میخوام یه عدد رو از تکست باکس بگیرم بعد تشخیص بده که عدد اعشاری هست یا صحیح؟

Hybrid
سه شنبه 15 فروردین 1391, 20:38 عصر
سلام ،

1 ) یک لیبل و یک دکمه و یک تکست باکس روی فرم قرار بده

2 ) کد زیر رو در رویداد Click دکمه بنویس :


try
{
int i = 0;

i = Convert.ToInt32(textBox1.Text);

label1.Text = "عدد صحیح";


}
catch
{
label1.Text = "اعشاری";

}

3 ) برنامه رو دیباگ کن و نتیجه رو مشاهده کن.

موفق باشید./

C#.net
سه شنبه 15 فروردین 1391, 21:12 عصر
سلام ،

1 ) یک لیبل و یک دکمه و یک تکست باکس روی فرم قرار بده

2 ) کد زیر رو در رویداد Click دکمه بنویس :


try
{
int i = 0;

i = Convert.ToInt32(textBox1.Text);

label1.Text = "عدد صحیح";


}
catch
{
label1.Text = "اعشاری";

}

3 ) برنامه رو دیباگ کن و نتیجه رو مشاهده کن.

موفق باشید./


و به ازای ورودی تکست باکس = "jkajkdfkjadfkb" ؟ :چشمک:

p.yazdkhasti
سه شنبه 15 فروردین 1391, 22:04 عصر
سلام
روش ذکر شده در بالا به دلیل استفاده از try-catch به نظر من روش مناسبی نیست و بهتر است از امکانات کتابخانه دات نت به صورت زیر استفاده نمایید:

public enum StringConversionResult:short
{
Nan = 0,
Integer=1,
Float=2
}

و سپس

public StringConversionResult ProcessString(string s)
{
var i = 0;
var d = 0d;
if (int.TryParse(s,out i))
{
return StringConversionResult.Integer;
}
return double.TryParse(s,out d) ? StringConversionResult.Float : StringConversionResult.Nan;
}

Hybrid
سه شنبه 15 فروردین 1391, 23:03 عصر
و به ازای ورودی تکست باکس = "jkajkdfkjadfkb" ؟ :چشمک:

کد بالا در صورتی که کاربر فقط داخل تکست باکس عدد رو وارد کنه کاربرد داره ، نه اینکه هم بیاد حرف وارد کنهو هم Symbol . با if میتونه چک کنه.


روش ذکر شده در بالا به دلیل استفاده از try-catch به نظر من روش مناسبی نیست

اشکالات رو بگین ممنون میشم.

p.yazdkhasti
سه شنبه 15 فروردین 1391, 23:45 عصر
سلام
در کد نویسی در دات نت توصیه می شود تا حد ممکن از try-catch استفاده نشود و از آن تنها در مواردی استفاده کرد که می خواهید بعد بروز خطا عملیاتی مانند Rollback کردن یک Transaction و یا Log کردن خطا و یا نمایش پیغام خطا به کاربر را داشته باشید. دلیل این موضوع نحوه اجرای کد نوشته شده در این حالت توسط CLR است. try-catch نباید برای مواردی که میتوان کد را بدون استفاده از آن نوشت استفاده شود. لینک های زیر در این زمینه مفید هستند:
http://weblogs.asp.net/memi/archive/2004/05/13/131244.aspx
http://codebetter.com/karlseguin/2010/01/25/don-t-use-try-catch/

ali_habibi1384
چهارشنبه 16 فروردین 1391, 08:51 صبح
استفاده از Try-Catch اصلا قابل قبول نيست.


if (((int)Convert.ToDouble(textBox1.Text)).ToString () != textBox1.Text) MessageBox.Show("Float");

blue_sky_0261
چهارشنبه 16 فروردین 1391, 13:35 عصر
سلام نحوه ی صحیح تشخیص نوع ورودی اینه :

if (txtbox.Text.GetType() == typeof(Int32))
{
///int
}
else
{
///float
}

amirrr3
چهارشنبه 16 فروردین 1391, 15:56 عصر
تا زمانی که GetType() هست چرا از این روشای پر درد سر استفاده می کنید؟!
ببخشید که اسپم شد

p.yazdkhasti
چهارشنبه 16 فروردین 1391, 20:29 عصر
تا زمانی که GetType() هست چرا از این روشای پر درد سر استفاده می کنید؟!
ببخشید که اسپم شد

سلام نحوه ی صحیح تشخیص نوع ورودی اینه :

if (txtbox.Text.GetType() == typeof(Int32))
{
///int
}
else
{
///float
}


سلام
در پاسخ به دوستانی که از این روش استفاده کرده اند باید توضیح بدهم که متد GetType یک متد از کلاس System.Object است و در نتیجه کلیه انواع داده ای این متد را دارا می باشند. با فراخوانی این متد به صورت txtbox.Text.GetType() ، خروجی متد در شرایطی که مقدار txtbox.Text برابر با Null نباشد همیشه typeof (System.String) است و در هنگامی که Null باشد کد شما با خطا روبرو خواهد شد و Exception خواهد داد.

xxxsenatorxxx
پنج شنبه 17 فروردین 1391, 14:02 عصر
استفاده از Try-Catch اصلا قابل قبول نيست.


if (((int)Convert.ToDouble(textBox1.Text)).ToString () != textBox1.Text) MessageBox.Show("Float");


چرا استفاده از ترای کش اشکال داره؟نه اینجا کلا مگه مشکل درست میکنه؟

C#.net
پنج شنبه 17 فروردین 1391, 16:34 عصر
چرا استفاده از ترای کش اشکال داره؟نه اینجا کلا مگه مشکل درست میکنه؟

نه دوست عزیز، چیز بدی نیست منتها برای این کار مناسب نیست، کاربرد اون سینتکس برای مدیریت خطا هست نه برای پیاده سازی منطق.
به عبارت دیگه روش پر هزینه ای هست و روش های بهینه تری وجود داره