نمایش نتایج 1 تا 12 از 12

نام تاپیک: مشکل در catch کردن چند Exception

  1. #1
    کاربر دائمی آواتار arash ghafori
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    In Web
    پست
    208

    Question مشکل در catch کردن چند Exception

    با سلام.
    من یک کلاس Validation دارم که شامل این 3 تابع هست :


    public void Validate1(string name, int min, bool optional, Format format)
    {
    if (name == "")
    {
    throw new ArgumentNullException();
    }
    }

    public void Validate2(string name, bool optional, Format format)
    {
    if (name == "")
    {
    throw new ArgumentNullException();
    }
    }

    public void Validate3(string name, int min, bool optional, Format format)
    {
    if (name == "")
    {
    throw new ArgumentNullException();
    }
    }


    حالا من مقدار 3 تا TextBox رو به ترتیب به این تابع ها میدم.

    ولی هر سه تا با یه Catch کنترل میشه.


    catch (ArgumentNullException)
    {

    MessageBox.Show("فیلد خالی است");
    }


    مشکل من اینه که میخام تک تک اینا جدا گونه Catch بشن و پیغام مربوط به خودشونو بدن !
    مثلا اگه textbox1 خالی شد ، پیغام خودشو بده . و textbox2 خالی شد ، پیغام دیگه ای بده و....!
    چیکار کنم ؟
    ممنون !

  2. #2

    نقل قول: مشکل در catch کردن چند Exception

    خب شما در داخل هر یک از void ها تون یه try و یک catch استفاده کنید.

  3. #3

    نقل قول: مشکل در catch کردن چند Exception

    میتونی با یک متد هر سه تکست باکس رو چک کنی ، یک پارامتر دیگه برای متد در نظر بگیر. data برای متن تکست باکس و name برای پرتاب توسط exception. با همین name میتونی بفهمی کدوم تکست باکس خالی هست.

    public void Validation(string data, string name, int min, bool optional)//, Format format)
    {
    if (data == "")
    {
    throw new ArgumentNullException(name);
    }
    }
    آخرین ویرایش به وسیله Mahmoud.Afrad : پنج شنبه 12 اردیبهشت 1392 در 21:22 عصر

  4. #4
    کاربر دائمی آواتار arash ghafori
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    In Web
    پست
    208

    نقل قول: مشکل در catch کردن چند Exception

    نقل قول نوشته شده توسط why.darkness مشاهده تاپیک
    خب شما در داخل هر یک از void ها تون یه try و یک catch استفاده کنید.
    نه.
    من توی کلاس Validation اکسپشن رو throw میکنم و این دستور catch رو هم توی دکمه ی Add to DB نوشتم.

    اگه من توی کلاس ، اکسپشنم رو throw کنم بعد توی همون کلاس Catchش کنم چطوری به کابر پیغاممو نمایش بدم ؟ مگه کلاس MessageBox داره ؟؟

    ممنون میشم راهنماییم کنید.

  5. #5
    کاربر دائمی آواتار arash ghafori
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    In Web
    پست
    208

    نقل قول: مشکل در catch کردن چند Exception

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    چرا سه متد یک شکل. میتونی با یک متد هر سه تکست باکس رو چک کنی ، یک پارامتر دیگه برای متد در نظر بگیر. data برای متن تکست باکس و name برای پرتاب توسط exception. با همین name میتونی بفهمی کدوم تکست باکس خالی هست.

    public void Validation(string data, string name, int min, bool optional)//, Format format)
    {
    if (data == "")
    {
    throw new ArgumentNullException(name);
    }
    }
    حرفتون کاملا درست و منطقیه !! ممنون .
    اما یه سوال ؟
    من الان Cachام رو کجا بنویسم؟
    (Catchی که خودم توی اولین تاپیک گذاشتم ، توی دکمه ی Add هستش.
    ممنون.

  6. #6

    نقل قول: مشکل در catch کردن چند Exception

    لایه ای کار میکنی؟ این چک کردن رو در چه لایه ای انجام میدی؟
    اگر همه کلاست همینه که گذاشتی نیاز نیست کلاس ایجاد کنی. فوقش میتونی همین شرط رو جایی که نیاز هست به جای متد استفاده کنی. یا اینکه این متد رو در کلاس فرم بنویسی. اگر بگی کجا از این کلاس استفاده میکنی بهتره.

  7. #7
    کاربر دائمی آواتار arash ghafori
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    In Web
    پست
    208

    نقل قول: مشکل در catch کردن چند Exception

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    لایه ای کار میکنی؟ این چک کردن رو در چه لایه ای انجام میدی؟
    اگر همه کلاست همینه که گذاشتی نیاز نیست کلاس ایجاد کنی. فوقش میتونی همین شرط رو جایی که نیاز هست به جای متد استفاده کنی. یا اینکه این متد رو در کلاس فرم بنویسی. اگر بگی کجا از این کلاس استفاده میکنی بهتره.
    در حال حاضر که طبق گفته ی شما برنامه رو تغییر ندادم ،این ی متد از کلاس Validation هست :



    public void Charecter_Validate(string name, int min, bool optional, Format format)
    {

    if (optional == false)
    {
    if (name == "")
    {
    throw new ArgumentNullException();
    }
    else if (min < 3)
    {
    throw new ArgumentOutOfRangeException();
    }
    else if (textContainsUnacceptable(name, UnAcceptable))
    {
    throw new Exception();
    }
    }
    }


    و بعد این هم داخل دکمه ی Add to DB :

    try
    {
    Validation a = new Validation();
    a.Charecter_Validate(textBox1.Text, textBox1.TextLength, false, Format.Alphabet);

    dbopration b = new dbopration();
    b.connect();
    b.insert("INSERT INTO Table1 (name,family,phone,codemeli,email,address)" + "VALUES (N'" + textBox1.Text + "',N'" + textBox2.Text + "',N'" + textBox3.Text + "',N'" + textBox4.Text + "',N'" + textBox5.Text + "',N'" + textBox6.Text + "')");
    b.ShowDGV("SELECT * FROM Table1", dataGridView1, lblnumber);
    b.Disconnect();
    }
    catch (ArgumentNullException)
    {

    MessageBox.Show("فیلد نام خالی است");
    }
    catch (ArgumentOutOfRangeException)
    {
    MessageBox.Show("تعداد حروف نام باید حداقل سه کارکتر باشد");
    }
    catch (Exception)
    {
    MessageBox.Show("در فیلد نام فقط رشته وارد کنید");
    }


    با این اوصاف اگه بخام طبق گفته ی شما عمل کنم ، Catch رو کجا و با چه شکل بزارم که مثل Message به کابر نمایش داده بشه .
    ممنون از لطفتون.

  8. #8

    نقل قول: مشکل در catch کردن چند Exception

    سلام
    بهتره برنامه خودت را به این صورت بنویسی

    public void Charecter_Validate(string name, int min, bool optional, string format)
    {

    if (optional == false)
    {
    if (name == "")
    {
    throw new Exception("فیلد نام خالی است");
    }
    if (min < 3)
    {
    throw new Exception("تعداد حروف نام باید حداقل سه کارکتر باشد");
    }
    if (textContainsUnacceptable(name, UnAcceptable))
    {
    throw new Exception("در فیلد نام فقط رشته وارد کنید");
    }
    }
    }



    بعد هم فقط از یک دستور catch به شکل زیر استفاده کن

    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }

  9. #9
    کاربر دائمی آواتار arash ghafori
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    In Web
    پست
    208

    نقل قول: مشکل در catch کردن چند Exception

    نقل قول نوشته شده توسط nasim2012 مشاهده تاپیک
    سلام
    بهتره برنامه خودت را به این صورت بنویسی

    public void Charecter_Validate(string name, int min, bool optional, string format)
    {

    if (optional == false)
    {
    if (name == "")
    {
    throw new Exception("فیلد نام خالی است");
    }
    if (min < 3)
    {
    throw new Exception("تعداد حروف نام باید حداقل سه کارکتر باشد");
    }
    if (textContainsUnacceptable(name, UnAcceptable))
    {
    throw new Exception("در فیلد نام فقط رشته وارد کنید");
    }
    }
    }



    بعد هم فقط از یک دستور catch به شکل زیر استفاده کن

    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    ممنون از توجهتون.
    اما این روش یه روش کلی هست . نه جزئی ! در ضمن من میخام پیغامی که من مینویسم نمایش بده ! نه Exception رو !

  10. #10

    نقل قول: مشکل در catch کردن چند Exception

    خب پیغام رو از طریق خود Exception منتقل کن. طبق مثال nasim2012



    در غیر اینصورت باید از انواع مناسب Exception برای تفاوت استفاده کنی.

    public void Character_Validation(string name, int min, bool optional, Format format)
    {
    if (optional == false)
    {
    if (name == "")
    {
    throw new ArgumentException();
    }
    else if (min < 3)
    {
    throw new ArgumentOutOfRangeException();
    }
    else if (textContainsUnacceptable(name, UnAcceptable))
    {
    throw new FormatException();
    }
    }
    }

    Catch هم که طبق همون انواع

    catch (ArgumentException)
    {
    MessageBox.Show("فیلد نام خالی است");
    }
    catch (ArgumentOutOfRangeException)
    {
    MessageBox.Show("تعداد حروف نام باید حداقل سه کارکتر باشد");
    }
    catch (FormatException)
    {
    MessageBox.Show("در فیلد نام فقط رشته وارد کنید");
    }

  11. #11
    کاربر دائمی آواتار arash ghafori
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    In Web
    پست
    208

    نقل قول: مشکل در catch کردن چند Exception

    اشتباه از من بود . nasim2012 درست میگفت .

    ممنون از همتون.

  12. #12
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313

    نقل قول: مشکل در catch کردن چند Exception

    خوب موقع throw کردن یک مقدار بده مثلا
    throw new ArgumentNullException("فیلد نام خالی هست");

     try
    {
    throw new ArgumentNullException("نام");
    throw new Exception("فیلد نام خالی هست", new ArgumentNullException("Name"));

    }

    catch (ArgumentNullException ex1)
    {
    //if (ex1.ParamName == "نام")
    // MessageBox.Show("فیلد نام خالی هست");
    ////or
    MessageBox.Show(string.Format("فیلد {0} خالی هست", ex1.ParamName));


    }
    catch (Exception ex0)
    {

    MessageBox.Show(ex0.Message);
    }

تاپیک های مشابه

  1. مشکل در inline کردن چند div
    نوشته شده توسط amin7x در بخش طراحی وب (Web Design)
    پاسخ: 2
    آخرین پست: یک شنبه 08 اردیبهشت 1392, 00:46 صبح
  2. مشکل در باز کردن چند فرم در یک برنامه
    نوشته شده توسط hojjjat در بخش C#‎‎
    پاسخ: 1
    آخرین پست: سه شنبه 22 اسفند 1391, 22:20 عصر
  3. مشکل در union کردن چند select
    نوشته شده توسط Mohsen82 در بخش T-SQL
    پاسخ: 1
    آخرین پست: شنبه 11 آذر 1391, 10:18 صبح
  4. سوال: مشکل با include کردن چند صفحه
    نوشته شده توسط yasinpc در بخش PHP
    پاسخ: 11
    آخرین پست: جمعه 12 تیر 1388, 23:40 عصر
  5. مشکل در رجیستر کردن چند sql
    نوشته شده توسط amirnfs در بخش SQL Server
    پاسخ: 1
    آخرین پست: یک شنبه 04 شهریور 1386, 23:43 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •