2010-09-22 54 views
0

比方说,我有将WinForm标签放入数组中?

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个愚蠢的代码行。

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

谢谢!

回答

2

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

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

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

如果您在设计时添加了50个标签,这样他们可以获得50个单独的名称,那么我不知道任何更好的解决方案。

如果您想要设置所有标签的文本,您还可以遍历表单的Controls集合,并检查它们是否为Label类型,如果是,请设置它们的文本属性。

0

你有两个选择:

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

    for (int i = 0; i < 50; i++) 
        labelArray[i] = (Label)GetType().GetField("Label" + (i+1)).GetValue(this); 
    
  • 不要使用的WinForms设计师创造了50个标签,但动态地创建他们,并把他们直入在首位的阵列。

+0

您的反射代码不起作用,但我不知道如何解决它。特别是“GetType()”和“this”被标记为错误。 – sooprise 2010-09-22 13:40:56

+0

好吧,这些错误似乎源于这样的事实,即代码是在一个静态方法... – sooprise 2010-09-22 13:43:39

+0

@Soo:正确。例如,如果标签集在运行时不会更改,则可以将其放入窗体的构造函数中。 – Timwi 2010-09-22 13:44:54