如何获取splitContainer.Panel2下的所有按钮和标签

时间:2013-08-29 11:13:02

标签: c# winforms controls splitcontainer

我想获得splitContainer.Panel2下所有按钮和标签的背景颜色。 当我尝试它时,我发现我没有成功运行任何控件(在Panel2下) 我试试这段代码:

foreach (Control c in ((Control)splitContainer.Panel2).Controls)
{
    if ((c is Button) || (c is Label))
        MessageBox.Show("Name: " + c.Name + "  Back Color: " + c.BackColor);
}

如何在splitContainer.Panel2下获取所有标签和按钮的所有背景颜色?

修改

  1. 我在splitcontainer.Panel2中有一些面板,按钮和标签在面板中。
  2. 我只得到这个meesage:“名称:panel_Right返回颜色:颜色[透明]”

3 个答案:

答案 0 :(得分:5)

您收到的消息可能是因为您的splitContainer.Panel2下有一个小组,应该这样做:

foreach (Control c in ((Control)splitContainer.Panel2).Controls)
{
    if(c is Panel)
    {
      foreach (Control curr in c.Controls)
      {
         MessageBox.Show("Name: " + curr.Name + "  Back Color: " + curr.BackColor);
      }
    }
}

答案 1 :(得分:3)

您可以在没有LINQ的情况下执行此操作,但我想在此处使用LINQ

public IEnumerable<Control> GetControls(Control c){            
  return new []{c}.Concat(c.Controls.OfType<Control>()
                                    .SelectMany(x => GetControls(x)));
}    
foreach(Control c in GetControls(splitContainer.Panel2).Where(x=>x is Label || x is Button))
   MessageBox.Show("Name: " + c.Name + "  Back Color: " + c.BackColor);

答案 2 :(得分:0)

您还应该为ButtonLabel添加支票。在messagebox之前添加此行:

if ((c is Button) || (c is Label))