引用不同事件处理程序中以编程方式添加的控件

本文关键字:方式 编程 添加 控件 事件处理 程序 引用 | 更新日期: 2023-09-27 18:36:46

好的,所以我有一个程序,我在其中添加了一些文本框,如下所示:

TextBox textbox = new TextBox();
textbox.Location = new Point(100, 100);
this.Controls.Add(textbox)

在此之后,我创建了一个按钮:

Button button = new Button();
button.Text = String.Format("Calculate");
button.Location = new Point(70, 70);
this.Controls.Add(button);

因为我要添加它,所以我需要创建自己的事件处理程序:

button.Click += new EventHandler(button_Click);

我遇到的问题是引用我在创建的事件处理程序中创建的文本框。

任何帮助将不胜感激。

引用不同事件处理程序中以编程方式添加的控件

使用 Name 属性来查找它:

textbox.Name = "myTextBox";
void button_Click(object sender, EventArgs e) {
  if (this.Controls.ContainsKey("myTextBox")) {
    TextBox tb = this.Controls["myTextBox"] as TextBox;
    MessageBox.Show(tb.Text);
  }
}

只需存储对文本框的类级引用,以便可以从按钮事件处理程序中引用它。

另一种选择是在按钮的标记属性中存储对文本框的引用:

    button.Tag = textbox;

然后,您可以在按钮单击处理程序中检索:

    void button_Click(object sender, EventArgs e)
    {
        TextBox tb = (TextBox)((Button)sender).Tag;
        MessageBox.Show(tb.Text);
    }