PDA

View Full Version : عدم تغییر خصوصیت Label در حلقه با بررسی متن آن



harani
پنج شنبه 31 مرداد 1392, 15:52 عصر
سلام چرا کد من :




foreach (Label lbl in mypanel.Controls.OfType<Label>())//d
{
if (lbl.Text.Equals("lbl") )//a
btnResult.Visible = false;//b
else
btnResult.Visible = true;//c
}



مثل کد زیر کار نمیکند ؟

109553

مشکل کار کجاست ؟

plus
پنج شنبه 31 مرداد 1392, 16:11 عصر
شما توی کدی که با if نوشته شده، ابتدا همه شرایط را چک میکنی بعد مقدار Visible رو تعیین میکنی، ولی توی کد اول به تعداد Label ها مقدار Visible تغییر میکنه و احتمالا اینجا اشکال ایجاد میشه.یک راه اینه:

foreach (Label lbl in mypanel.Controls.OfType<Label>())//d
{
if (lbl.Text.Equals("lbl") )//a
{
btnResult.Visible = false;//b
break;
}
else
btnResult.Visible = true;//c
}

که میگه اگه حتی یک کنترل که متنش lbl هست پیدا شد، Visible برابر false بشه و از حلقه خارج بشه.اشکال این کد اینه که به تعداد کنترل هایی که شرط lbl براشون برقرار نیست btnResult.Visible = true اجرا میشه.درست تر اینه:

bool visible = true;
foreach (Label lbl in mypanel.Controls.OfType<Label>())//d
{
if (lbl.Text.Equals("lbl") )//a
{
visible = false;
break;
}
}
btnResult.Visible = visible;
}

که میشه اینطوری هم نوشتش:

btnResult.Visible = (this.Controls.OfType<Label>().Count(label => label.Text.Equals("lbl")) == 0);

که میشه Visible دکمه در صورتی true باشه که تعداد label هایی که متنشون lbl هست 0 باشه. البته من روش ساده تر رو ترجیح میدم.