我想获得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下获取所有标签和按钮的所有背景颜色?
修改
答案 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)
您还应该为Button
和Label
添加支票。在messagebox
之前添加此行:
if ((c is Button) || (c is Label))