我想获得splitContainer.Panel2下所有按钮和标签的背景色。当我尝试时,我发现我无法在任何控制下运行(在面板2下)我尝试这个代码:
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,按钮和标签在面板中
- 我只收到这样的信息:"名称:panel_Right Back颜色:彩色[透明]"
您收到消息可能是因为您的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);
}
}
}
您可以在没有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);
您还应该为Button
和Label
添加一个检查。在messagebox
:之前添加此行
if ((c is Button) || (c is Label))