اعبتار سنجی اطلاعات
با سلام و خسته نباشید خدمت دوستان ، سوال و مشکلی که هست در مورد کامپوننت error provider است
برای مثال من در یک فرم چند تکس باکس دارم برای اعتبار سنجی هر کدام یک error provider در نظر گرفتم ، حالا مشکل اینجاست در اخر که گزینه ی ثبت زده شد ، چطوری بگم که وقتی در فرم error وجود دارد اجازه ثبت ندهد ، در غیر این صورت روال طبیعیه ذخیره سازی انجام بشه.
با تشکر
2 پاسخ
خیلی ساده است شما توی رویداد کلیک دکمه تایید فرم مثلا دکمه save یا هرچی که اسمشو گذاشتی هرکدوم از شرایط اعتبار فرم رو که چک کردی بعد از errorprovider مربوط به اون از رویداد کلیک خارج میشی return میکنی و اگه شرط برقرار باشه میره شرط بعدی رو چک میکنه و باز همین طور تا آخر تمام شرایط اعتبار فرم چک میشن اگه برقرار نبودن errorprovider پیام میده و بعد دستور return و اگه شرط برقرار بود میره شرط بعدی تا شرایط تمام میشن و بنابراین زمانی میرسیم به کد اجرایی فرم (مثلا ذخیره اطلاعات در دیتابیس)، که تمام شرایط برقرار باشند در غیر این صورت حتما یه جایی قبل از این return اجرا شده و دیگه به کد اجرایی اصلی فرم نمیرسیم.
void buttonSave_Clicked(object sender, EventArgs e) { if(string.IsNullOfEmpty(txtNote)) { errorProvider1.SetError(txtNote, "تکمیل این فیلد الزامی است"); return; } if(string.IsNullOfEmpty(someOtherTextBox)) { errorProvider1.SetError(someOtherTextBox, "تکمیل این فیلد الزامی است"); return; } // ... }
یه حالت دیگه هم وجود داره که به جای اینکه return کنی قبل از هر شرطی یک متغیر بولین مثلا با نام isOK که مقدار اولیه اش true هست تعریف میکنی و بعد هر شرطی که معتبر نبود و erroeprovider پیام مربوطه رو صادر کرد بعدش بلافاصله این متغیر isOK برابر False شود. و بعد از if های چک کننده شروط اعتبار فرم با if(isOK) تنها زمانی کد اجرایی اصلی (ذخیره در دیتابیس) رو اجرا میکنیم که isOK در هیچ مرحله ای false نشده باشد
void buttonSave_Clicked(object sender, EventArgs e) { bool isOk = true; if(string.IsNullOfEmpty(txtNote)) { errorProvider1.SetError(txtNote, "تکمیل این فیلد الزامی است"); isOk = false; } if(string.IsNullOfEmpty(someOtherTextBox)) { errorProvider1.SetError(someOtherTextBox, "تکمیل این فیلد الزامی است"); isOk = false; } // if(isOk) { ... } }
سلام
میتونی با یک error provider از کد زیر استفاده کنی
به نحوی که داخل tag هر مثلا textbox اسم اون فیلد رو قرار میدی .
مثلا اینجا برای textbox که قراره id رو بگیره داخل تگش نوشتم id و بعد از کد زیر استفاده میکنی :
private void button1_Click(object sender, EventArgs e) { errorProvider1.Clear(); bool flag = false; foreach(Component com in this.Controls) { if(com is TextBox) { if(string.IsNullOrEmpty((com as TextBox).Text)) { errorProvider1.SetError((com as TextBox), "please insert " + (com as TextBox).Tag); flag = true; } } } if (flag) return; else { // your code } }