PDA

View Full Version : سوال: مدیریت استثنا در C#



diba_gh
شنبه 06 مهر 1387, 14:49 عصر
برای اینکه مقدار وارده شده در یک textbox حتما یک عدد از نوع int باشه مدیریت استثناء آن را این طور می نویسیم

try
{
int b = Convert.ToInt32(textBox2.Text);
}
catch (FormatException)
{
MessageBox.Show(" لطفا یک عدد صحیح وارد کنید","خطا" ,MessageBoxButtons.OK, MessageBoxIcon.Error);
}

حالا برای اینکه مقدار یک textBox حتما یک عدد از نوع bit باشه باید مدیریت استثنا اون را چه طوری بنویسیم؟

SMRAH1
شنبه 06 مهر 1387, 15:44 عصر
سلام

اول کمی توضحی در مورد خوده FormatException :
به طور کلی هرگاه شما به پارامتری مقداری تخصیص بدهید که با مقدار نهایی هماهنگ نباشد،این استثنا رخ خواهد داد در مثال بالا اگر textBox2.Textدارای رشته ای غیر عدد صحیح باشد(با توجه به اینکه Convert.ToInt32 یک رشته حاوی اعداد صحیح می خواهد)این استثنا رخ می دهد.
این مطلب در مورد تمام انواع دیگر صادق است مثلا double یا ...

اما در مورد نوع bit !!! این نوع رو توی C# ندیدم می شه توضیح بیشتری بدهید.

rostamkhani
شنبه 06 مهر 1387, 15:59 عصر
سلام
فکر کنم اینطوری بنویسی کارت راه بیوفته


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != '0' && e.KeyChar != '1' && e.KeyChar!=8)
e.KeyChar = char.MinValue;
}


یا مثلا از textBox خود با کد زیر استفاده کنی


class MyTextBox : TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
//if (e.KeyChar != '0' && e.KeyChar != '1' && e.KeyChar != 8)
// e.KeyChar = char.MinValue;
}
public override string Text
{
get
{
GetValidStr(base.Text);
return base.Text;
}
set
{
base.Text = value;
}
}
private void GetValidStr(string str)
{
if (str != string.Empty)
{
str = str.Trim();
str = str.Replace("1", "");
str = str.Replace("0", "");
if (str != string.Empty)
{
throw new ApplicationException("خطا در ورود دقت کنید وگرنه!");
}
}
}
}

Xcalivorse
شنبه 06 مهر 1387, 19:23 عصر
به جای بیت(که البته در دات نت نداریمش) از بول استفاده کن. همون مقدار هم فضا اشغال می کنه.

jaza_sa
شنبه 06 مهر 1387, 20:07 عصر
Integer Types :

sbyte
-128 to 127
Signed 8-bit integer

byte
0 to 255
Unsigned 8-bit integer

char
U+0000 to U+ffff
Unicode 16-bit character

short
-32,768 to 32,767
Signed 16-bit integer

ushort
0 to 65,535
Unsigned 16-bit integer

int
-2,147,483,648 to 2,147,483,647
Signed 32-bit integer

uint
0 to 4,294,967,295
Unsigned 32-bit integer

long
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Signed 64-bit integer

ulong
0 to 18,446,744,073,709,551,615
Unsigned 64-bit integer

لینک MSDN 2008 : ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/dv_csref/html/62e86126-46ff-40b0-9028-e61d7558268c.htm

diba_gh
یک شنبه 07 مهر 1387, 00:59 صبح
ممنون از راهنمایی تون. حالا یه سوال دیگه(با عرض شرمندگی). اینکه اگر بخوایم مقدار یک textBox حتما یک کلمه اونم با فونت فارسی باشه اون وقت چه جوری باید بنویسیم؟ یعنی کاربر می خواد اسم دیبا رو توی تکس باکس تایپ کنه، ولی یادش رفته که شیفت و آلت رو بگیره و فارسی نویسش کنه اون وقت اشتباهی می نویسه ndfh برای این هم می شه کاری کرد یا نه؟

jaza_sa
یک شنبه 07 مهر 1387, 01:33 صبح
میتونید با یک خط کد نویسی ، زبان فورم رو از en به fa تغیر بدید ---> جستجو کنید
برای اینکه فقط یک کلمه بتونه تایپ کنه ، میتونید تو رویداد KeyDown اون textbox ، جلوی وارد کردن کاراکتر ' ' (فاصله) رو بگیرید

diba_gh
یک شنبه 07 مهر 1387, 13:34 عصر
ممنون از راهنماییتون. rostamkhani عزیز اون کدی که داده بودی رو استفاده کردم اسم textBox ام رو گذاشتم mytextBox1 بعد کلاس MyTextBox رو هم توی برنامه گذاشتم حالا اگر همین جوری برنامه رو اجرا کنم این طوری میشه که هر عددی که توی textBox وارد می کنم میشه اسم فرمم . نمی دونم کجا رو اشتباه کردم یا متوجه شدم ممنون میشم کمکم کنی. شاید باید یه شیء از کلاس MyTextBox تعریف کنم؟

jaza_sa
یک شنبه 07 مهر 1387, 14:32 عصر
به این مثال دقت کنید :

Cold.82
یک شنبه 07 مهر 1387, 14:44 عصر
دوست عزیز چرا از این کد استفاده نمی کنید


foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
{
if (lang.Culture.Name == "fa-IR")
{
InputLanguage.CurrentInputLanguage = lang;
}
}

در قسمت load فرم بنویسید

rostamkhani
یک شنبه 07 مهر 1387, 18:31 عصر
سلام
دوست عزیز تنها با تغییر اسم که TextBox تغییر نمیکنه اون کدی که گزاشتم خودش یک TextBox هست که از کلاس TextBox ارث برده و شما بجای TextBox باید از کلاس MyTextBox استفاده کنی.
نحوه استفاده تو مثالی که گذاشتم میتونی دانلود کنی در پاسخ 3
به این شکله که یک کلاس Add items میکنی بعد کد رو داخلش paste میکنی و بعد از کامپایل کردن خود به خود به قسمت کنترل ها اظافه میشه .