うまくいけば単純な質問がありますが、解決策をグーグルで検索することはできませんでした.実行時にラベルボタンのテキストボックスを追加したいのですが、フォームのコンストラクターで追加できますが、コンストラクターの外ではアクセスできません.
このようなもの:
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";
}
}
私がコメントアウトした解決策は私が見つけた唯一の解決策ですが、それよりも優れた解決策がないとは信じられません。たとえば、コントロールを公開する方法はありますか? この問題を解決する良い方法は何ですか?
(コントロールの数は、設計しようとしているダイアログボックスを呼び出すたびに異なります)
ありがとう
編集 - - - - - - - - - - - - -
Adilの答えを受け入れた後、私は次の解決策にとどまりました。これは、最初にコメントアウトされたthis.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";
}
}