从 Windows Forms 控件中按名称查找控件

47

我有一个文本框名称列表,我想通过名称查找控件。怎么做呢?

3个回答

107

使用Control.ControlCollection.Find方法。

TextBox tbx = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox;
tbx.Text = "found!";

针对提问者的编辑:

Control[] tbxs = this.Controls.Find(txtbox_and_message[0,0], true);
if (tbxs != null && tbxs.Length > 0)
{
    tbxs[0].Text = "Found!";
}

TextBox tBox = this.Controls.Find(txtbox_and_message[0, 0], true).FirstOrDefault() as TextBox; 这样可以吗? - krunal shah
获取此错误.. .NET Framework 2.0.. 'System.Array' 不包含定义为 'FirstOrDefault' 的成员,并且找不到接受类型为 'System.Array' 的第一个参数的扩展方法 'FirstOrDefault'(是否缺少使用指令或程序集引用?) - krunal shah
不,我不是在动态添加。我已经有了文本框列表。我将所有文本框的名称存储在一个数组中。从该数组中获取名称,然后查找文本框,然后想要从特定的文本框中获取文本。 - krunal shah
3
找到文本框:TextBox foundTbx = this.Controls.Find(textBoxes[5], true)[0] as TextBox; (说明:此代码片段是在 C# 中编写的,用于在窗体控件中查找具有特定名称的文本框,并将其分配给名为 "foundTbx" 的变量。) - bla
1
将 .FirstOrDefault() 改为 [0]。 - bla
显示剩余2条评论

14

你可以使用:

f.Controls[name];

其中f是您的表单变量。这将为您提供名称为name的控件。


8
请注意,如果控件嵌套,则此方法无效(您只能查找该级别中存在的控件)。 - Michael Petrotta
我尝试的例子是: Button btn = f.Controls["name"] as Button; - Z.W.Huang

5
TextBox tbx = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox;
tbx.Text = "found!";

如果在Controls.Find中没有找到"textBox1" => 出错。你必须添加代码。
If(tbx != null)

编辑:

TextBox tbx = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox;
If(tbx != null)
   tbx.Text = "found!";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接