شما توی کدی که با 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 باشه. البته من روش ساده تر رو ترجیح میدم.