访问动态创建的事件处理程序中动态创建的控件(文本框)
本文关键字:创建 动态 文本 程序 事件处理 访问 控件 | 更新日期: 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 sender
是TextBox
。您可以将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();
}
}