PDA

View Full Version : استفاده از errorProvider در تمام textbox ها



SamStar
چهارشنبه 23 اسفند 1391, 22:25 عصر
من میخوام توی فرمم روی تمام textbox ها validation داشته باشه .
برای اینکار باید در رویداد textchanged تمام تکست باکسهام از ارورپروایدر استفاده کنم یا در رویداد validating تکست باکس رو بررسی کنم ؟
در اینصورت با وجود تکست باکسهای زیاد خیلی برنامه ام شلوغ و بهم ریخته میشه و یه عالمه کد باید بنویسم برای چک کردن ورودی فیلدها !
راه دیگه ای نیست ؟
اگه یه نمونه آماده برای چک کردن تکست باکسها (که خالی نباشن ، فقط عدد با تعداد یا فرمت مشخص یا فقط حروف باشن یا چکهتی دیگه با استفاده از regular expression ) دارید خیلی ممنون میشم برای دانلود بزارید

veniz2008
چهارشنبه 23 اسفند 1391, 22:38 عصر
سلام. فقط یک error provider نیاز دارید.
اینو ببین (با یک تغییر کوچیک میتونید همزمان روی تمام کنترل ها، error provider بارونش! کنی) :

if (string.IsNullOrWhiteSpace(TxtYearExam.Text))
errorProvider1.SetError(TxtYearExam, "سال تحصیلی بایستی مشخص باشد");
else if (string.IsNullOrWhiteSpace(TxtTerm.Text))
errorProvider1.SetError(TxtTerm, "ترم تحصیلی بایستی مشخص باشد");
else if (string.IsNullOrWhiteSpace(CmbGroup.Text))
errorProvider1.SetError(CmbGroup, "گروه آموزشی بایستی مشخص باشد");

SamStar
چهارشنبه 23 اسفند 1391, 22:46 عصر
ممنون اما این کد فقط خالی نبودن فیلدها رو چک میکنه
اما من همونطور که گفتم میخوام مثلا برای تکست باکس کدملی چک کنه 10 رقم باشه برای تلفن 7-8 رقم و فقط عدد برای نام فقط حروف برای ایمیل فرمت مشخص و الی آخر
فکر میکنم تنها راهش همین باشه که پشت رویداد textchanged تمام تکست باکسها کد مربوطه رو بنویسم . نه ؟
برای اون textbox هایی که validation هاشون مثل هم هستن چی ؟ نمیشه یه کاری کرد که کدها کوتاه تر بشن ؟

veniz2008
چهارشنبه 23 اسفند 1391, 22:56 عصر
if (string.IsNullOrWhiteSpace(TxtMeliCode.Text) || TxtMeliCode.Text.Length != 10)
errorProvider1.SetError(TxtMeliCode, "کد ملی را بصورت یک عدد 10 رقمی وارد نمایید");
else if (string.IsNullOrWhiteSpace(TxtPhone.Text) || TxtPhone.Text.Length != 11)
errorProvider1.SetError(TxtPhone, "شماره تلفن یک عدد 11 رقمی می باشد");

SamStar
چهارشنبه 23 اسفند 1391, 23:11 عصر
ممنون .
میشه یک مثال هم بزنید که چطور میشه regularexpression ها رو هم خلاصه کرد ؟

یه سوال دیگه :
من این کدها رو در ایونت کلیک دکمه ثبت اطلاعات نوشتم . با اینکه ارورپروایدر ارور میده ولی بازم ثبت اطلاعات صورت میگیره . چطور میتونیم کاری کنیم که تا اطلاعات درست وارد نشده ثبت صورت نگیره ؟

SamStar
پنج شنبه 24 اسفند 1391, 17:17 عصر
???:متفکر:

veniz2008
پنج شنبه 24 اسفند 1391, 17:23 عصر
ممنون .
میشه یک مثال هم بزنید که چطور میشه regularexpression ها رو هم خلاصه کرد ؟
اگه منظورتون مثلا وارد کردن فقط عدد یا وازد کردن فقط حروف فارسی هست قبلا بارها بحث شده. جستجو کنید.

من این کدها رو در ایونت کلیک دکمه ثبت اطلاعات نوشتم . با اینکه ارورپروایدر ارور میده ولی بازم ثبت اطلاعات صورت میگیره . چطور میتونیم کاری کنیم که تا اطلاعات درست وارد نشده ثبت صورت نگیره ؟
این برمیگرده به مدیریت کردن if و else . کدت رو بزار.

SamStar
پنج شنبه 24 اسفند 1391, 18:13 عصر
این رویداد کلیک دکمه ثبت اطلاعات است که بعد از try/catch بررسی اطلاعات وارد شده در تکست باکسها رو انجام میده (البته این قسمت رو هنوز تکمیل نکردم و فعلا فقط کدهای شما رو برای تست گذاشتم :
باید if /else بزارم که وقتی errorprovider خطا میگیره عملیات انجام نشه ؟



private void button1_Click(object sender, EventArgs e)
{
try
{
BLL objBLL = new BLL();
string Values = "('" + txtName.Text + "','" + txtFamily.Text + "','"
+ txtTel.Text + "')";
objBLL.Insert(Values);
lblconfirm.Visible = true;


}
catch
{
lblconfirm.Text = "بروز خطا در سیستم";
lblconfirm.Visible = true;
}

ErrorProvider ep = new ErrorProvider();
if (string.IsNullOrEmpty(txtName.Text))
ep.SetError(txtName, "نمیتواند خالی باشد");
else
ep.SetError(txtName, "");

if (string.IsNullOrEmpty(txtName.Text))
errorProvider1.SetError(txtName, "سال تحصیلی بایستی مشخص باشد");
else if (string.IsNullOrEmpty(txtFamily.Text))
errorProvider1.SetError(txtFamily, "ترم تحصیلی بایستی مشخص باشد");
else if (string.IsNullOrEmpty(txtTel.Text))
errorProvider1.SetError(txtTel, "گروه آموزشی بایستی مشخص باشد");


if (string.IsNullOrEmpty(txtcode.Text) || txtcode.Text.Length != 10)
{
errorProvider1.SetError(txtcode, "کد ملی را بصورت یک عدد 10 رقمی وارد نمایید");


}
else if (string.IsNullOrEmpty(txtTel.Text) || txtTel.Text.Length != 11)
errorProvider1.SetError(txtTel, "شماره تلفن یک عدد 11 رقمی می باشد");

}


این هم رویداد ontextchange یکی از تکست باکسهام با regularexpression هستش که بقیه تکست باکسها هم مثل همین کد رو پشت رویداد تکست چنج دارن:



private void txtemail_TextChanged(object sender, EventArgs e)
{

Regex rgx;
rgx = new Regex(@"^\S+@\S+\.\S+$");
Control ctrl = (Control)sender;
if (rgx.IsMatch(ctrl.Text))
{
errorProvider1.SetError(ctrl, "");
}
else
{
errorProvider1.SetError(ctrl, "ایمیل نامعتبر");
}
}

veniz2008
پنج شنبه 24 اسفند 1391, 18:40 عصر
شما اول درج میکنی بعد چک میکنی؟.
شما ساده ترین مسائل رو هم در برنامه رعایت نمیکنی دوست عزیز.
موفق باشید.

khokhan
پنج شنبه 24 اسفند 1391, 19:16 عصر
سلام به همه

من معمولا از این شیوه استفاده می کنم

SamStar
پنج شنبه 24 اسفند 1391, 19:46 عصر
شما اول درج میکنی بعد چک میکنی؟.
شما ساده ترین مسائل رو هم در برنامه رعایت نمیکنی دوست عزیز.
موفق باشید.

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

ضمنا ما اینجا هستیم که چیزهای جدید یادبگیریم و برنامه نویسی مون رو پیشرفت بدیم . حالا هرکس درسطح خودش .
پس اگه مشکلی درکارم می بینید لطفا کمک کنید که رفع بشه نه با لحنی که حالت طعنه داره !

rg_BlackRose
پنج شنبه 24 اسفند 1391, 20:23 عصر
سلام

دوسمون هم اشاره کردن قبل از اینکه قسمت Try رو اجرا بکنید باید ورودی هایی رو که کاربر وارد میکنه رو بررسی بکنید. یعنی اول ورودی ها رو چک کنید اگر اطلاعاتی که کابر وارد کرده درست باشن قسمت Try اجرا بشه و داده ها ذخیره بشن. در غیر اینصورت برنامه از اجرای قسمت Try صرف نظر کنه.

بهتره برای اینکار یک تابع بنویسید که اطلاعات وارد شده توسط کاربر رو چک بکنه، اگه داده ها درست بودن مقدار true و در غیر اینصورت false رو برگردونه.


private bool CheckInputFields()
{
ErrorProvider ep = new ErrorProvider();

if (string.IsNullOrEmpty(txtName.Text))
{
ep.SetError(txtName, "نمیتواند خالی باشد");
return false;
}
else
ep.SetError(txtName, "");

if (string.IsNullOrEmpty(txtName.Text))
{
errorProvider1.SetError(txtName, "سال تحصیلی بایستی مشخص باشد");
return false;
}
else
errorProvider1.SetError(txtName, "");

if (string.IsNullOrEmpty(txtFamily.Text))
{
errorProvider1.SetError(txtFamily, "ترم تحصیلی بایستی مشخص باشد");
return false;
}
else
errorProvider1.SetError(txtFamily, "");

if (string.IsNullOrEmpty(txtTel.Text))
{
errorProvider1.SetError(txtTel, "گروه آموزشی بایستی مشخص باشد");
return false;
}
else
errorProvider1.SetError(txtTel, "");

if (string.IsNullOrEmpty(txtcode.Text) || txtcode.Text.Length != 10)
{
errorProvider1.SetError(txtcode, "کد ملی را بصورت یک عدد 10 رقمی وارد نمایید");
return false;
}
else
errorProvider1.SetError(txtcode, "");

if (string.IsNullOrEmpty(txtTel.Text) || txtTel.Text.Length != 11)
{
errorProvider1.SetError(txtTel, "شماره تلفن یک عدد 11 رقمی می باشد");
return false;
}
else
errorProvider1.SetError(txtTel, "");

Regex rgx;
rgx = new Regex(@"^\S+@\S+\.\S+$");
if (!rgx.IsMatch(txtemail.Text))
{
errorProvider1.SetError(txtemail, "ایمیل نامعتبر");
return false;
}
else
errorProvider1.SetError(txtemail, "");

return true;
}



حالا داخل رویداد کلیک button1 تابع بالا رو فراخوانی میکنید


private void button1_Click(object sender, EventArgs e)
{
if (!CheckInputFields())
return;

try
{
BLL objBLL = new BLL();
string Values = "('" + txtName.Text + "','" + txtFamily.Text + "','"
+ txtTel.Text + "')";
objBLL.Insert(Values);
lblconfirm.Visible = true;
}
catch
{
lblconfirm.Text = "بروز خطا در سیستم";
lblconfirm.Visible = true;
}
}



توی رویداد بالا اگه مقدارشرط که اول رویداد هست true باشه بقیه کدها اجرا میشن (یعنی قسمت try)
و اگه مقدار false باشه با دستور return کامپایلر از اجرای کدهای بعدی در این تابع خود داری میکنه و از تابع خارج میشه.

موفق باشید