我有一个希望很简单的问题,为此我无法谷歌任何解决方案: 我想在运行时添加标签按钮文本框,我可以在我的Form的构造函数中,但我不能在构造函数之外访问它们。
这样的事情:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Label changeMe = new Label();
changeMe.AutoSize = true;
changeMe.Left = 50; changeMe.Top = 50;
changeMe.Text = "Change this text from other function";
changeMe.IsAccessible = true;
//changeMe.Name = "changeMe";
this.Controls.Add(changeMe);
}
private void btn_changeLabelText_Click(object sender, EventArgs e)
{
//Would like to achieve this:
//changeMe.Text = "You changed me !! ";
//But I found only this solution:
//Label l; l = (Label)this.Controls.Find("changeMe", true)[0]; l.Text = "You changed Me";
}
}
我评论出的解决方案是我找到的唯一解决方案,但我无法相信那时没有更好的解决方案。有没有办法让我的控件公开?什么是解决这个问题的好方法?
(每次调用我想设计的Dialogbox时,控件的数量都会有所不同)
由于
编辑--------------------------
在接受了Adil的回答之后,我留下了以下解决方案,我只是发现更好,因为最初取消了这个.Control.Find的方式,因为我也想拥有“n”文本框,并且在这种方式我可以轻松循环通过他们阅读输入。
public partial class Form1 : Form
{
public struct labels { public Label lbl; public int id; }
List<labels> lbls = new List<labels>();
public Form1()
{
InitializeComponent();
Label changeMe = new Label();
changeMe.AutoSize = true;
changeMe.Left = 50; changeMe.Top = 50;
changeMe.Text = "Change this text from other function";
changeMe.IsAccessible = true;
this.Controls.Add(changeMe);
labels newlabel = new labels();
newlabel.id = 137; newlabel.lbl = changeMe;
lbls.Add(newlabel);
}
private void btn_changeLabelText_Click(object sender, EventArgs e)
{
lbls.Find(i => i.id == 137).lbl.Text = "You changed me";
}
}
答案 0 :(得分:4)
您在构造函数中声明了标签,使其只能在构造函数中访问,ceclare label
作为类成员在class scope
的外部构造函数中访问。
Label changeMe = new Label();
public Form1()
{
InitializeComponent();
Label changeMe = new Label();
changeMe.AutoSize = true;
changeMe.Left = 50; changeMe.Top = 50;
changeMe.Text = "Change this text from other function";
changeMe.IsAccessible = true;
//changeMe.Name = "changeMe";
this.Controls.Add(changeMe);
}