如何通过单击按钮更改所有标签前景色

问题描述 投票:1回答:5

我想创建一个按钮,通过单击按钮更改标签的前景色。但每当我点击按钮时,它只会改变不在面板中的标签的前景色。这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    this.BackColor = Color.White;
    foreach(Control l in Controls)
    {
        if(l is Label)
        {
            l.ForeColor = Color.Black;
        }           
    }
}

我试过用了

private void button1_Click(object sender, EventArgs e)
{
    this.BackColor = Color.White;
    foreach(Label l in Controls)
    {                
        l.ForeColor = Color.Black;
    }
}

但它给了我一个错误,说它无法将System.Windows.Forms.Panel类型的对象强制转换为System.Windows.Forms.Label

c# winforms button label
5个回答
2
投票

你不能做这个

foreach(Label l in Controls)

因为并非Control中的所有Controls都是Label类型

用LINQ做吧

foreach(Label l in panel.Controls.OfType<Label>())
    l.ForeColor = Color.Black

这样,你将有选择地从Control首先获得Label类型的Controls

编辑:

如果您在一个表单中有多个面板,并且想要更改所有面板内所有标签的颜色,则可以进行多个循环

foreach(Panel p in Controls.OfType<Panel>())
    foreach(Label l in p.Controls.OfType<Label>())    
        l.ForeColor = Color.Black;

如果你有一些Labels不在面板但在表格中,你可以结合以上与

foreach(Label l in Controls.OfType<Label>())    
    l.ForeColor = Color.Black;

2
投票

您可以使用Linq过滤控件:

foreach (Label l in Controls.OfType<Label>())
{
    l.ForeColor = Color.Black;
}

编辑:

如果你有更深层次的控件,你可以递归:

private void SetLabelBlack(Control ctrl)
{
    foreach (Control c in ctrl.Controls)
    {
        Label l = c as Label;
        if (l != null)
        {
            l.ForeColor = Color.Black;
        }
        else
        {
            SetLabelBlack(c);
        }
    }
}

并称之为:

SetLabelBlack(this);

1
投票

由于错误建议你必须检查其类型!

private void button1_Click(object sender, EventArgs e)
{
this.BackColor = Color.White;
foreach(Control l in Controls)
{
    if(l.GetType()==typeof(System.Windows.Forms.Label))
    {
        l.ForeColor = Color.Black;
    }           
}
}

0
投票

在列表中添加要更新的所有标签(列表)。然后迭代该列表中的所有标签并更新前景色。 panel.Controls仅返回该面板中的控件,因此如果要更新的标签不在该面板面板中。控件将不起作用,而且它仅对该面板的直接子节点进行迭代。在面板中,您可以拥有另一个包含面板等的面板......


-1
投票
foreach(Control c in this.Controls)
                {
                    if(c is Label)
                    {
                        Label b = c as Label;
                        b.ForeColor = Color.White;
                    }
                }
© www.soinside.com 2019 - 2024. All rights reserved.