访问动态创建的事件处理程序中动态创建的控件(文本框)

本文关键字:创建 动态 文本 程序 事件处理 访问 控件 | 更新日期: 2023-09-27 17:50:34

我试图访问我的动态创建的TextBox在c#中,在一个按钮的事件处理程序。

     void MainFormLoad(object sender, EventArgs e)
     {
        this.Width=600;
        this.Height=400;
        this.FormBorderStyle= FormBorderStyle.FixedDialog;
        TextBox t=new TextBox();
        this.Controls.Add(t);
        t.Location = new Point(60,40);
        Label Mylable=new Label();
        this.Controls.Add(Mylable);
        Mylable.Location=new Point(15,43);
        Mylable.Text="string : ";
        t.Width=200;
        t.Name="MyText";
        t.Refresh();
        Button Myb=new Button();
        Myb.Location=new Point(270,40);
        this.Controls.Add(Myb);
        Myb.Text="Reverse it!";
        Myb.Name="Mybo";
        Myb.Click += new EventHandler(this.Myb_Clicked);
        this.Refresh();                     
    }
    void Myb_Clicked(object sender, EventArgs e) {
              // HOW SHOULD I GAIN ACCESS to MyText.Text HERE
              MessageBox.Show();
    }

访问动态创建的事件处理程序中动态创建的控件(文本框)

给你的动态TextBox一个name:

 TextBox t=new TextBox();
 t.Name = "MyTextBox";
 this.Controls.Add(t);

然后:

void Myb_Clicked(object sender, EventArgs e) {
    string text = this.Controls["MyTextBox"].Text;
}

错误答案:object senderTextBox。您可以将sender转换为textbox并使用它。

一个体面的方法是让你的文本框成为类级别的成员。然后你就可以使用它了。如果没有,将TextBox.Text链接到一个字符串属性并使用它。

你可以在你的类中保留一个TextBox的引用

 publc class MyForm: Form
 {
     TextBox myBox = null;  // class member
     void MainFormLoad(object sender, EventArgs e)
     {
         this.Width=600;
         this.Height=400;
         this.FormBorderStyle= FormBorderStyle.FixedDialog;
         TextBox t=new TextBox();
         myBox = t; // keep it for future reference
         // rest of your code
   }
   void Myb_Clicked(object sender, EventArgs e) {
          if (myBox !=null)
          {
                myBox.Text= "Clicked!";
          }
          MessageBox.Show();
    }
}