如何获取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下的所有的标签和按钮的所有背景颜色?
编辑:
- 我在splitcontainer.Panel2一些面板和按钮和标签的面板。
- 我只得到这个meesage: “姓名: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);
}
}
}
答
您还应该添加一个支票Button
和Label
。 messagebox
之前添加此行:
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);
什么没有在你显示的代码工作?你有没有例外? .Controls是否为空? –
那么你对此有何期待? – VahidNaderi
我想你在'splitContainer.Panel2'中有一个名为'panel_Right'的Panel。这可能是您添加的唯一控件。休息可以在里面'panel_Right' –