【问题标题】:Find control by name from Windows Forms controls从 Windows 窗体控件中按名称查找控件
【发布时间】:2011-04-23 08:26:47
【问题描述】:

我有一个文本框名称列表,我想按名称查找控件。怎么可能?

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    使用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;好吗?
    • 出现此错误.. .net framework 2.0.. 'System.Array' 不包含'FirstOrDefault' 的定义,并且没有扩展方法'FirstOrDefault' 接受'System.Array' 类型的第一个参数' 可以找到(您是否缺少 using 指令或程序集引用?)
    • 您是否在运行时动态地将文本框添加到表单中?如果是这种情况,您可以为每个文本框分配一个唯一名称,并使用 controls.find 查找具有唯一名称的文本框。
    • TextBox foundTbx = this.Controls.Find(textBoxes[5], true)[0] as TextBox;
    • 将 .FirstOrDefault() 更改为 [0]
    【解决方案2】:

    你可以使用:

    f.Controls[name];
    

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

    【讨论】:

    • 请注意,如果控件是嵌套的,这将不起作用(您只会在控件层次结构中找到该级别的控件)。
    • 我尝试的例子是:Button btn = f.Controls["name"] as Button;
    【解决方案3】:
    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!";
    

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多