PDA

View Full Version : تغییر زبان متن exeption ها



ordebehesht
شنبه 13 مهر 1392, 23:55 عصر
با سلام من یه جایی دیدم متن خطا ها فارسی بودن الان من میخوام این کار رو کنم چه طوری میتونم ممکنه راهنمایی کنید

returnx
یک شنبه 14 مهر 1392, 00:36 صبح
در واقع شما میتونید خطا ها را به این شکل به دام بندازید :
private void Form1_Load(object sender, EventArgs e)
{
try
{
test(0);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}


}

void test(int foo)
{
try
{

int x = 10;
x = x / foo;
}
catch (Exception ex)
{
switch (ex.HResult)
{
case -2147352558:
throw new ApplicationException("خطای تقسیم بر صفر");


}
}


}

samin_panahi
یک شنبه 14 مهر 1392, 09:20 صبح
در واقع شما میتونید خطا ها را به این شکل به دام بندازید :

void test(int foo)
{
try
{

int x = 10;
x = x / foo;
}
catch (Exception ex)
{
switch (ex.HResult)
{
case -2147352558:
throw new ApplicationException("خطای تقسیم بر صفر");
}
}
}

می شه در مورد catch تو تابع test توضیح بدید ؟
HResult چیه؟
چرا مقدار case رو -2147352558 گذاشتید؟

returnx
یک شنبه 14 مهر 1392, 09:50 صبح
می شه در مورد catch تو تابع test توضیح بدید ؟همونطور که می دونید برای به دام انداختن خطا ها از بلاک try,catch استفاده می کنیم...
ابتدا Exception مورد نظر را می گیریم و برای تشخیص نوع Exception از خاصیت HResult استفاده می کنیم ،
HResult در واقع مقدار عددی است که به هر نوع Exception اختصاص داده میشه و با این خاصیت شما می تونید تشخیص بدید خطای اتفاق افتاده از چه نوعی هست...
Exception Reference: http://msdn.microsoft.com/en-us/library/system.exception.aspx

چرا مقدار case رو -2147352558 گذاشتید؟
چون کد خطای تقسیم بر صفر ، این عدد هست...
و بعد برای هر خطا ، پیام مورد نظرتون را با استفاده از کلاس ApplicationException پرتاب می کنید به سمت بالا ترین بلاک Try Catch...

negar.rafie
یک شنبه 14 مهر 1392, 10:10 صبح
چرا
throw new ApplicationException("خطای تقسیم بر صفر");
نمیشه بنویسیم
Messagebox.show("خطای تقسیم بر صفر")

returnx
یک شنبه 14 مهر 1392, 10:15 صبح
چرا ، اما اینکار از نظر اصولی زیاد درست نیست ، نمایش پیام خطاها به کاربر باید در بالاترین بلاک Try Catch انجام بشه ، چرا که شما باید بدونید ، کلاسی که می نویسید صرفا قرار نیست خودتون ازش استفاده کنید ، ممکن که برنامه نویس دومی بخواد از این کلاس استفاده کنه ، آیا درسته از یک کلاس ، Message Box فرستاده بشه !؟ اگر برنامه نویس دوم بخواد پیام دیگه ای را جایگزین این پیام کنه و به کاربر نمایش بده ، باید چی کار کنه!؟

negar.rafie
یک شنبه 14 مهر 1392, 10:25 صبح
راستش متوجه نشدم من همیشه وقتی از بلاک try,catchاستفاده میکردم برای نمایش خطا از کلاس messagebox استفاده میکردم ایا کار من اشتباه بوده؟
منظورتون از نمایش پیام خطاها به کاربر باید در بالاترین بلاک Try Catch انجام بشه چیه میشه با نمونه کد توضیح بدید و چرا اگر از messagebox استفاده کنیم اشتباه است؟

returnx
یک شنبه 14 مهر 1392, 19:11 عصر
برای نمایش خطا از کلاس messagebox استفاده میکردم ایا کار من اشتباه بوده؟این کار اشتباست چون همیشه باید در نظر داشته باشید که کدی که می نویسید قرار نیست صرفا خودتون استفاده کنید ، خیلی وقتا شما یک کلاس می نویسید که قرار برنامه نویس های دیگه ازش استفاده کنند ، وقتی شما برای نمایش خطا از تو کلاس یک Message Box نمایش میدید آیا برنامه نویس دوم امکان هندل کردن این خطا را داره!؟ شاید بخواد پیام دیگه ای را نمایش بده ، شاید اصلا نخواد پیامی نمایش بده و در کل نمایش Message Box از تو یک کلاس کلا کار اشتباهیست...
چرا شما میتونید Exception که در کلاس های دات نت اتفاق میفته را مدیریت کنید!؟ چرا میتونید هر پیامی که خواستید نمایش بدید !؟ این به این دلیل که این Exception ها در اصطلاح پرتاب میشه به سمت شما و به شما این اجازه را میده که تصمیم بگیرید که چه کاری قرار انجام بدید...
برای اینکار از throw استفاده میشه ، اینکار Exception مورد نظر را تحویل میده به try-catch که شما برای استفاده از یک کلاس یا متد خاص استفاده کردید...
فکر کنم مثال اول تقریبا گویاست ، یکبار دیگه مطالعه کنید...