在运行时查找控件的正确方法

时间:2012-03-02 12:52:06

标签: winforms

我想在运行时查找标签,这是正确的方法吗?

Control[] control;
Label label;

control = this.Controls.Find(labelToChange, false);
label = (Label)control[0];

我找不到一个返回单个控件的方法,所以我必须将它存储一个集合,然后检索第一个。它总能找到一个项目。

2 个答案:

答案 0 :(得分:1)

这是正确的使用方法。

MSDN documentation并不表示它返回集合的原因,但是如果你有一个封装了几个子控件的控件并多次实例化那么你最终会得到一组标签。

所以:

  1. 如果您可以保证在任何时候只有一个控件可见,那么您的代码就可以了。
  2. 如果可能有多个,那么你需要遍历所有返回的控件,并对每个控件执行相同的操作,或者添加更多代码以确定你真正想要的那个。

答案 1 :(得分:1)

linq的基本想法:

Label label;

var c = from x in Controls.Find("labelToChange", false)
    where x.GetType() == typeof(Label)
    select x;

label = (Label)c.FirstOrDefault();