کنترل ErrorProvider
کنترل ErrorProvider در مورد اشتباهات به کاربر هشدار میدهد. این اخطار ممکن است به خاطر خالی گذاشتن یک جعبه متن و یا اشتباه وارد کردن یک آدرس ایمیل باشد. در جداول زیر متدها، خاصیتها و رویدادهای مهم این کنترل ذکر شدهاند :
خاصیت | توضیح | |
BlinkRate | سرعت چشمک زدن آیکون ErrorProvider را مشخص میکند. | |
BlinkStyle | نحوه نمایش آیکون ErrorProvider را مشخص میکند. اینکه آیا این آیکون همیشه در حال چشمک زدن باشد، یا در صورت خطا نمایش داده شود و یا اصلاً نمایش داده نشود. | |
ContainerControl | کنترل والد، کنترل ErrorProvider را مشخص میکند. | |
Icon | آیکونی را که هنگام وقوع خطا باید نمایش داده شود را مشخص میکند. این آیکون زمانی نمایش داده میشود که برای خطا متنی مشخص کرده باشیم. | |
RightToLeft | برای راست به چپ کردن متن خطا به کار میرود. |
متد | توضیح | |
GetError() | پیغام خطایی که برای کنترل مشخص کردهایم را بر میگرداند. | |
GetIconAlignment() | محل قرار گیری آیکون خطا بسته به محل کنترل را بر میگرداند. | |
GetIconPadding() | فاصله آیکون خطا نسبت به کنترل والد را بر میگرداند. | |
SetError() | متن خطایی که در صورت بروز خطا قرار است به کاربر نمایش داده شود را مشخص میکند. | |
SetIconAlignment() | محل قرار گیری آیکون خطا نسبت به کنترل را مشخص میکند. | |
SetIconPadding() | فاصله بین آیکون خطا و کنترل مورد نظر را مشخص میکند. |
رویداد | توضیح | |
RightToLeftChanged | وقتی روی میدهد که مقدار خاصیت RightToLeft تغییر کند. |
برای آشنایی با روش کار این کنترل، یک برنامه ویندوزی مانند شکل زیر ایجاد کنید و سپس دو جعبه متن و دو کنترل ErrorProvider بر روی آن قرار دهید :
لازم است که از رویدادهای اعتبارسنجی (validating) برای هر دو جعبه متن استفاده کنیم. بر روی جعبههای متن یکبار کلیک کرده و سپس از پنجره Properties به قسمت رویدادها رفته و بر روی رویداد validating دو بار کلیک کنید. کد زیر را در کنترل کننده رویداد validating جعبه متن FirstName ایجاد شده بنویسید :
private void textBox1_Validating(object sender, CancelEventArgs e) { if (textBox1.Text == string.Empty) { errorProvider1.SetError(textBox1, "Please Enter Name"); } }
در کد بالا اعلام کردهایم که اگر TextBox اول خالی بود، کنترل errorProvider1 ظاهر شده و به کاربر هشدار دهد. در کد بالا ما از متد ()SetError برای این کار استفاده کردهایم. این متد دو آرگومان قبول میکند، که آرگومان اول نام کنترلی است که errorProvider به آن میچسبد و آرگومان دوم پیغام هشداری است که با مکث بر روی آیکون errorProvider به شما نشان داده میشود. برای مشاهده عملکرد این کنترل برنامه را اجرا کرده و بدون اینکه در TextBox اول چیزی بنویسید، بر روی TextBox دوم کلیک کنید :
همانطور که در شکل بالا مشاهده میکنید با کلیک بر روی TextBox دوم کنترل errorProvider1 ظاهر شده و با مکث بر روی آیکون قرمز رنگ، پیام هشداری که در متد ()SetError مشخص کردهاید به شما نمایش داده میشود. برای TextBox دوم هم به روشی مشابه میتوان کد زیر را نوشت :
private void textBox2_Validating(object sender, CancelEventArgs e) { if (textBox2.Text == string.Empty) { errorProvider2.SetError(textBox2, "Please Enter Family"); } }
تنها تفاوت مربوط به اختصاص errorProvider2 به کنترل TextBox دوم است. حال برنامه را اجرا کرده و دو بار دکمه Tab را بزنید :
همانطور که احتمالاً تا کنون متوجه شدهاید این کنترل دارای یک آیکون به صورت پیشفرض میباشد. اگر این آیکون رو دوست ندارید میتوانید از یک آیکون دلخواه استفاده کنید. به عنوان مثال بر روی کنترل errorProvider1 کلیک کرده و سپس در در پنجره Properties بر روی خاصیت Icon مانند شکل زیر کلیک کنید :
با کلیک بر روی این خاصیت پنجرهای ظاهر میشود که از شما مسیر آیکون با پسوند ico. را میخواهد. آیکون را انتخاب کرده و سپس بر روی دکمه Open کلیک کنید :
حال برنامه را اجرا کرده و با کلیک بر روی دکمه Tab نتیجه را مشاهده کنید :
برای تنظیم فاصله آیکون از کنترل میتوان از متد ()SetIconPadding به صورت زیر استفاده کرد :
errorProvider1.SetIconPadding(textBox1,20);
کد بالا، یک فاصله 20 پیکسلی بین کنترل TextBox و آیکون ایجاد میکند :
برای تنظیم مکان نمایش Icon هم میتوان از متد ()SetIconAlignment استفاده کرد. این متد، دو آرگومان قبول میکند که اولی نام کنترل و دیگری یک نوع شمارشی است که مکان نمایش آیکون را، مشخص میکند :
برای مشاهده عملکرد این متد، ارتفاع دو جعبه متن را تغییر داده و کدهای زیر را برای دو errorProvider بنویسید :
errorProvider1.SetIconAlignment(textBox1, ErrorIconAlignment.TopRight); errorProvider2.SetIconAlignment(textBox2, ErrorIconAlignment.MiddleRight);
برنامه را اجرا و با زدن دکمه Tab نتیجه را مشاهده کنید :
سلام جناب ابراهیمی .یه سوال داشتم. مثلا میخواهیم ورودیمون تیمیل باشه و حتما @gmail.com داشته باشه. و وقتی که کاربر متنی رو با پسوند @gmail.com وارد کرد چشمک زن قطع شود
سلام، ممنون میشم سوالتونو تو بخش پرسش و پاسخ مطرح بفرمایید
وقتی تو محیط کدنویسی هستین، چه برنامه خطا داشته با چه نداشته باشه، قسمت properties غیر فعاله، چون این قسمت فقط در حالت دیزاین معنا داره و فعاله. ولی اینکه تو حالت کدنویسی باشین و برین قسمت دیزاین باید خودکار فعال بشه، اینکه چرا واسه شما غیر فعاله رو نمی دونم، یه عکس بگیرین و یا سوالتونو همراه با عکسی از خطا تو بخش پرسش و پاسخ مطرح بفرمایید تا دوستان راهنماییتون کنن
ممنون از راهنماییتون فقط من یه مشکل دیگه داشتم می خواستم بدونم چرا وقتی از حالت کد نویسی می خوام به حالت دیزاین برگردم یا برم به قسمت properties غیر فعال میشه البته وقتی خطا داره این اتفاق می افته من نمیدونم باید چطور فعالش کنم ممنون میشم اگه راهنماییم کنید
سلام جناب ابراهیمی ممنون از مطالب مفیدتون من میخواستم ببینم چرا کلمه ی private رو وقتی خودم می نویسم خطا میده
سلام
این بر می گرده به اتفاقاتی که پشت صحنه توسط ویژوال استودیو اتفاق میوفته و با مطالعه مبحث ((کنترل کننده رویداد)) متوجه میشین، چرا خطا رخ میده. به هر حال شما باید رویداد Validating رو از پنجره Properties پیدا و دو بار روش کلیک کنید و کدهاتون رو بنویسین.
جناب ابراهیمی با سلام جوابم را پیدا کردم به زحمت نیفتید
[جناب ابراهیمی خسته نباشید در دستورهای زیر
عبارت های “Please Enter Name” و “Please Enter Family” چرا در صفحه مانیتور نمایش داده نمیشوند
سلام، ممنون
باید روی آیکون مربوطه مکث کنید تا نمایش داده بشن
جناب ابراهیمی بسیار مفید بودخصوصا اینکه کاربرد validating نیز معلوم شد
خواهش می کنم، لطف دارین
عالی