1

我想获取 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. 我只收到这个消息:“名称:panel_Right Back Color:Color [Transparent]”
4

3 回答 3

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);
      }
    }
}
于 2013-08-29T11:25:21.960 回答
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);
于 2013-08-29T11:23:59.167 回答
0

您还应该添加一个检查Buttonand Label。在之前添加这一行messagebox

if ((c is Button) || (c is Label))
于 2013-08-29T11:21:55.563 回答