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

Winforms 在运行时查找控件的正确方法,winforms,Winforms,我想在运行时查找标签,这是正确的方法吗 Control[] control; Label label; control = this.Controls.Find(labelToChange, false); label = (Label)control[0]; 我找不到一个返回单个控件的方法,所以我必须将其存储为一个集合,然后检索第一个。它将始终找到单个项目。这是正确的使用方法 没有指明它返回集合的原因,但如果您有一个封装了多个子控件并多次实例化的控件,则最终将得到一个标签集合 因此: 如果

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

Control[] control;
Label label;

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

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

这是正确的使用方法

没有指明它返回集合的原因,但如果您有一个封装了多个子控件并多次实例化的控件,则最终将得到一个标签集合

因此:

  • 如果您可以保证在任何时候只有一个控件可见,那么您的代码就正常了
  • 如果可能有多个控件,那么您需要循环返回的所有控件,或者对每个控件执行相同的操作,或者添加更多的代码以确定您真正想要的控件
  • linq的基本理念:

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

    至少他们提供了一种通过所有子控件自动迭代的简单方法。Asp.net没有这个。谢谢,但我从未使用过Linq