【问题标题】:Putting WinForm Labels Into An Array?将 WinForm 标签放入数组中?
【发布时间】:2010-09-22 13:28:40
【问题描述】:

假设我有

Label1
Label2
Label3

我想做这样的事情:

for(int i=0;i<3;i++)
{
    LabelArray[i].Text = "weee!";
}

要填充数组,我知道我可以执行以下操作:

LabelArray[0] = Label1;
LabelArray[1] = Label2;
LabelArray[2] = Label3;

但这似乎并不聪明,因为我有 50 个标签,那将是 50 行愚蠢的代码。

有没有更好的方法来做到这一点?

谢谢!

【问题讨论】:

    标签: c# winforms arrays


    【解决方案1】:

    您必须遍历 Form.Controls[] 才能找到标签。

    foreach (var control in this.Controls)
    {
        if (control is Lable)
             labelList.Add((Lable)control));
    }
    

    【讨论】:

      【解决方案2】:

      如果您以编程方式创建标签,则可以创建标签,并在 for 循环中设置文本,然后将其添加到表单控件集合中。

      如果您在设计时添加 50 个标签以便获得 50 个单独的名称,那么我不知道有什么更好的解决方案。

      如果你想设置所有标签的文本,你也可以迭代你的 Form 的 Controls 集合并检查它们是否是 Label 类型,如果是,设置它们的 text 属性。

      【讨论】:

        【解决方案3】:

        你有两个选择:

        • 使用反射获取标签,例如

          for (int i = 0; i < 50; i++)
              labelArray[i] = (Label)GetType().GetField("Label" + (i+1)).GetValue(this);
          
        • 不要使用 WinForms 设计器来创建 50 个标签,而是动态创建它们并将它们直接放入数组中。

        【讨论】:

        • 您的反射代码不起作用,但我不知道如何修复它。特别是“GetType()”和“this”被标记为错误。
        • 好的,这些错误似乎是由于代码位于静态方法中......
        • @Soo:正确。如果标签集在运行时从不改变,例如,您可以将其放在表单的构造函数中。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多