PDA

View Full Version : آموزش: غیر فعال کردن تمامی کنترل های یک فرم بصورت بازگشتی



mohammad_kazem
پنج شنبه 18 دی 1393, 22:40 عصر
با عرض سلام و خسته نباشید خدمت تمامی دوستان عزیزم. امروز تصمیم گرفتم یک مبحث آموزشی ساده رو توی تالار بزارم. اگه با استقبال دوستان مواجه شد، ایشالا سعی میکنم به این کار ادامه بدم و تکه کدهای نکته دار و حرفه ای تری رو در اینجا قرار بدم.
فرض کنید یک فرم داریم که حاوی چندتا کنترل هستش. میخوایم در هنگام لود شدن فرم، همه کنترل های داخل فرم بجز یک کنترل خاص(مثلا یک دکمه) غیر فعال بشن. شاید این کار رو کرده باشید. اما اینجا من بصورت بازگشتی میخوام این کار رو انجام بدم. اول تو رویداد لود صفحه کد زیر رو مینویسیم:


private void Form1_Load(object sender, EventArgs e) {
DisableControls(this);
EnableControls(Button1);
}
تا اینجا که توضیح خاصی لازم نیست. دو متد نوشتیم که اونا رو فراخوانی کردیم. فرم رو به متد disablecontrols و دکمه مورد نظرمون رو به متد enablecontrols فرستادیم.
متد disablecontrols رو به شکل زیر مینویسیم

private void DisableControls(Control ctrl)
{
foreach (Control c in ctrl.Controls)
{
DisableControls(c);
}
ctrl.Enabled = false;
}


توی حلقه، به ازای هر کنترل داخل فرم، دوباره همون متد disablecontrols رو فراخوانی کرده و کنترل رو بهش پاس میدیم. در انتها هم کنترل غیر فعال میشه. اینجوری تمام کنترل ها و کنترل های فرزندشون غیر فعال میشن.
حالا فقط فعال کردن دکمه مونده

private void EnableControls(Control ctrl)
{
if (ctrl != null)
{
ctrl.Enabled = true;
EnableControls(ctrl.Parent);
}
}


میدونیم که برای اینکه یک کنترل فعال باشه، باید پدرش هم فعال باشه. لذا توی این متد، اول چک میکنیم که کنترلمون null نباشه.اگه null نبود اول خودشو فعال کرده و بعد کنترل پدرشو به همین متد پاس میدیم. به این ترتیب کنترل فعال میشه.
لینک آموزش به زبان vb (http://barnamenevis.org/showthread.php?482093-%D8%BA%DB%8C%D8%B1-%D9%81%D8%B9%D8%A7%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AA%D9%85%D8%A7%D9%85%DB%8C-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7%DB%8C-%DB%8C%DA%A9-%D9%81%D8%B1%D9%85-%D8%A8%D8%B5%D9%88%D8%B1%D8%AA-%D8%A8%D8%A7%D8%B2%DA%AF%D8%B4%D8%AA%DB%8C)

elec60
جمعه 19 دی 1393, 10:59 صبح
اگه parent رو disable کنیم تمامی child ها هم disable میشن و نیازی نیست تمامی child ها رو disable کنیم.

mohammad_kazem
جمعه 19 دی 1393, 11:13 صبح
اگه parent رو disable کنیم تمامی child ها هم disable میشن و نیازی نیست تمامی child ها رو disable کنیم.
اره حرف شما کاملا درسته دوست عزیز. این صرفا یک نمونه بود که در جاهای مختلف، بسته به نوع نیاز برنامه نویس میتونه تغییر بکنه.