不使用名称获取Label引用

时间:2011-02-06 12:11:21

标签: c# winforms

我正在尝试编写一个程序,当用户点击一个按钮时,它会打开任意数量的表单(每个表单都包含一个标签),并将它们放在一个列表中:

List<Form> formlist = new List<Form>();
...
public void showFrame()
{
Form f = new Form();
// I add the components i need ...
formlist.Add(f)
}

我现在需要的是,给定formlist中表单的i索引,以更改该表单的label.Text。 是否可以使用每个lavel使用不同的名称?

2 个答案:

答案 0 :(得分:4)

将您添加到表单的控件赋予名称。那就是

 formlist[i].Controls["somename"].Text = "mumble";

答案 1 :(得分:0)

简单的基于LINQ的解决方案:

Label label = form.Controls.OfType<Label>().SingleOrDefault();

话虽如此,请允许我说我相信您的方法有一个基本缺陷:您直接访问GUI控件意味着您将代码紧密地耦合到GUI。也就是说,您的代码与具体控件不可分割。恕我直言,建议您调查UI模式(如MVC或MVP),然后相应地重构程序的UI层,这样您就不必直接访问控件。