C# 如何在多个面板中隐藏控件?

C# 如何在多个面板中隐藏控件?,c#,winforms,C#,Winforms,我试图隐藏面板中的所有标签,而不是整个面板。 对于标签仅为label1、label2的情况。。我会这样做,但如果你知道更简单的方法,请告诉我: for(int i=0; i<3; i++){ Panel p = this.Controls["panel"+i] as Panel; for(int j=0; j<9; i++){ if(p.Controls["label"+j]!=null) p.Controls["label"+j].Visible=fals

我试图隐藏面板中的所有标签,而不是整个面板。 对于标签仅为label1、label2的情况。。我会这样做,但如果你知道更简单的方法,请告诉我:

for(int i=0; i<3; i++){
   Panel p = this.Controls["panel"+i] as Panel;

   for(int j=0; j<9; i++){
      if(p.Controls["label"+j]!=null) p.Controls["label"+j].Visible=false;
   }
}
但这似乎不起作用。

试试这个:

此控件中的每个面板p

p.控件中的foreachLabel l.Visible=假


第1种方式:使用2个foreach循环

foreach (Panel panel in Controls.OfType<Panel>())
{
   foreach (var label in panel.Controls.OfType<Label>())
   {
        label.Visible = false;
   }
}
命名空间。

尝试在控件集合上使用OfType筛选器来获取所需的类型,然后采取相应的行动:

foreach (Panel p in this.Controls.OfType<Panel>()) {
  foreach (Label l in p.Controls.OfType<Label>()) {
    l.Visible = false;
  }
}

此代码假定在其他面板中没有更多面板,等等。

那么你想用这段代码做什么?你想隐藏面板中的所有标签吗?还是只隐藏具有特定名称模式的所有标签?@Idle\u请注意这两种情况know@Vantalk我编辑了答案。OfType似乎无法识别:System.Windows.Forms.Control.ControlCollection不包含的定义'OfType'…@Vantalk add使用System.Linq;命名空间。编辑了答案,现在应该没有问题了。使用.System.Linq添加,效果很好。这意味着我相信这两个例子都使用Linq。标记为最完整的答案。@Vantalk of Type是第1种方式中的LINQ方法。并选择第二种方式中的many&OfType&Where。这将返回无法将类型标签的对象强制转换为类型面板。
foreach (var label in Controls.OfType<Panel>().SelectMany(panel =>panel.Controls.OfType<Label>()))
{
    label.Visible = false;
}
Controls.OfType<Panel>() 
foreach (Panel panel in Controls.OfType<Panel>())
{
     foreach (var label in panel.Controls.OfType<Label>())
     {
         if (label.Text.Contains("label")) // or any other condition that you want to perform
         {
             label.Visible = false;
         }
     }
}
foreach (var label in Controls.OfType<Panel>().SelectMany(panel => panel.Controls.OfType<Label>().Where(label => label.Text.Contains("label"))))
{
    label.Visible = false;
}
using System.Linq;
foreach (Panel p in this.Controls.OfType<Panel>()) {
  foreach (Label l in p.Controls.OfType<Label>()) {
    l.Visible = false;
  }
}