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

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

问题描述:

我想获取splitContainer.Panel2下所有按钮和标签的背景颜色。 当我尝试它,我发现我不是成功的(下是Panel2) 任何控制运行我试试这个代码:如何获取splitContainer.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返回颜色:颜色[透明]”
+0

什么没有在你显示的代码工作?你有没有例外? .Controls是否为空? –

+0

那么你对此有何期待? – VahidNaderi

+2

我想你在'splitContainer.Panel2'中有一个名为'panel_Right'的Panel。这可能是您添加的唯一控件。休息可以在里面'panel_Right' –

你得到的消息,可能是因为你有一个小组在你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); 
     } 
    } 
} 

您还应该添加一个支票ButtonLabelmessagebox之前添加此行:

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

谢谢。但我仍然没有成功去获取任何按钮或标签的实例。我插入这个代码。 – AsfK

你可以做到这一点没有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); 
+0

谢谢!这是美好的工作! – AsfK

+0

不错的递归之一 – jwaliszko