循环遍历所有控件[MaterialSkin](C#)

时间:2016-03-11 17:05:56

标签: c# foreach material-design

我正在制作一般软件,并在其中添加了一些标签(我不能说更多... xD) 所以,我想循环遍历我的表格中的每个控件或至少所有标签......我已经尝试过了

foreach (Control c in this.Controls)
{
    //item.Font.Size = 11f;
    c.ForeColor = Color.White;
}

但我认为它只会循环到MaterialSkin.Controls.MaterialTabControl

因为当我尝试使用MaterialLabel..etc

运行任何代码时
    foreach (MaterialLabel c in this.Controls)
    {
        //item.Font.Size = 11f;
        c.ForeColor = Color.White;
    }
它告诉我

Additional information: Unable to cast object of type 'MaterialSkin.Controls.MaterialTabControl' to type 'MaterialSkin.Controls.MaterialLabel'.

我需要帮助请帮助我:) 我不是一个很好的程序员...所以请帮助

现在要玩Left 4 Dead xD

2 个答案:

答案 0 :(得分:1)

在更改任何属性之前,请检查它是MaterialLabel的类型。

foreach (Control c in this.Controls)
{
    if(c.GetType()==typeof(MaterialLabel))
    {
         c.Font = new Font(c.Font, FontStyle.Bold);
         c.ForeColor = Color.White;
    }
}

或LarsTech说:

foreach (MaterialLabel c in this.Controls.OfType<MaterialLabel>())
{
     c.Font = new Font(c.Font, FontStyle.Bold);
    c.ForeColor = Color.White;
}

答案 1 :(得分:0)

几个选项......

foreach (var c in this.Controls)
{
    if(c is MaterialLabel)
    {
         var i = (MaterialLabel)c;
         i.Font = new Font(c.Font, FontStyle.Bold);
         i.ForeColor = Color.White;
    }
}

...

foreach (var c in this.Controls)
{
    //slightly faster than the first version but won't work with struct
    var i = c as MaterialLabel; 
    if(i != null)
    {
         i.Font = new Font(c.Font, FontStyle.Bold);
         i.ForeColor = Color.White;
    }
}

...

//cleanest
foreach (var c in this.Controls.OfType<MaterialLabel>())
{
     c.Font = new Font(c.Font, FontStyle.Bold);
     c.ForeColor = Color.White;
}