C#循环遍历给定标签的数组

时间:2011-10-17 09:20:37

标签: c# arrays winforms labels

我描述起来有点困难,但这个伪C#应该解释我正在尝试做什么。

Windows窗体上有大量标签。

我想更改其中一些标签的文字颜色。

private void allBlackLabels()
{
    int[] lray = { 1, 2, 3, 5, 6 };
    foreach (int i in lray)
    {
        label[i].Forecolor = Color.Black;
    }            
}

我希望这能解释我在这里要做的事情。

现在很明显,由于标签[i],它不会起作用,但我怎么能解决这个问题呢?

9 个答案:

答案 0 :(得分:4)

它可能不起作用,因为您的标签不是保存在数组中。考虑到您知道要更改的标签的名称,以下代码将起作用:

Label[] lray = { labelOne, labelDifferent, labelWhatElse };
foreach (Label label in lray)
{
    label.ForeColor = Color.Black;
}            

答案 1 :(得分:1)

如果您实际拥有标签数组,那么这样可以正常工作。

如果你只有很多变量,比如:

private Label label1;
private Label label2;
private Label label3;
private Label label4;
private Label label5;
那么它就更难了。选项:

  • 更改代码以改为使用数组。在设计师中不那么好,但更合乎逻辑
  • 对每个ID
  • 使用Controls.Find
  • 遍历Controls以查找所有 Label控件,无论名称是什么

答案 2 :(得分:1)

foreach (Control c in this.Controls)
{
    if (c is Label)
    {
        // do stuff
    }
}

这将获取所有表单的子控件(如果此代码在表单的代码隐藏中),并检查它们是否是标签。只需做任何你想要的操作来代替评论。

答案 3 :(得分:0)

您可以自己创建阵列。每次表单更改时,这都会带来一些维护成本/风险。注意:您可能希望将数组创建位置于Form Loaded事件中,而不是构造函数,或者至少在InitializeComponent调用之后,因此您的控件已设置好。

或者您可以通过Form方法迭代表单的所有子项(this.Controls),使用特定标记标记您的标签,或者如果这是您的目的,则获取所有标签。

请注意,如果表单中有许多控件,第一个解决方案在运行时性能方面可能要快得多。

答案 4 :(得分:0)

private void allBlackLabels()
{
    int[] lray = { 1, 2, 3, 5, 6 };
    foreach (int i = 0; i < lray.Length; i++)
    {
        ((Label)this.Controls["label" + i]).ForeColor = Color.Black;
    }            
}

答案 5 :(得分:0)

如果您希望对表单上的所有标签实现此目的,那么这样的事情可能会有所帮助:

foreach (Control control in this.Controls) {
     if (control is Label) {
         (control as Label).Forecolor = Color.Black;
     }
}

但是,如果您只需要更改所有标签的子集,则需要存储需要更改的标签的名称或索引。这是因为this.Controls有两个索引器,一个是int32,另一个是字符串。因此你可以试试这样的东西

private void allBlackLabels()
{
    int[] lray = { 1, 2, 3, 5, 6 };
    foreach (int i in lray)
    {
         this.Controls[i].Forecolor = Color.Black;
    }            
}

然而值得注意的是,this.Controls中的排序很可能不会像您的lray数组一样。 希望这有帮助

答案 6 :(得分:0)

尝试这样的事情:

List<string> ListLabelNames = new List<string>() { /* Your label name list*/ };

foreach (Label TmpLabel in this.Controls.OfType<Label>())
{
    foreach (string strTmp in ListLabelNames)
    {
        if (String.Compare(TmpLabel.Name, strTmp, true) == 0)
            TmpLabel.ForeColor = System.Drawing.Color.Black;
    }
}

希望这有帮助。

答案 7 :(得分:0)

我注意到你在示例中从“lray”数组中排除了4。如果您希望排除一个或多个标签不被代码自动更新(可能要突出显示组中的一个),请尝试此操作。

    private void allBlackLabels()
    {    
        foreach (Control control in this.Controls)            
        {
            if (control is Label && control.Name != "label4")
            {
                (control as Label).Forecolor = Color.Black;
            }
        }
    }

答案 8 :(得分:-1)

伪p#中的

List<String> controlsToChange =new List<String>{"lable1Name","lable2Name"};
foreach(Control control in form.Controls)
{
    if(control.GetType().Equals(typeof(Lable))
    {
         if( controlsToChange.Contains(control.Name)
         {
              control.Forecolor=Colour.Black;
         }
    }
}