私の問題は次のとおりです。フォームのロード、ボタン、およびコンボボックスに2つのコントロールを作成しました。ボタン用のイベントもありますが、イベントは新しく作成されたコンボボックスを表示できるはずです。その名前でコンボを呼び出そうとすると、このコンテキストには存在しないことがわかります。 private void Form1_Load(オブジェクト送信者、EventArgs e) { Button przycisk = new Button(); przycisk.Name = "przycisk"; przycisk.Dock = DockStyle.Bottom; przycisk.Text = "Wybierz";
ComboBox kombo = new ComboBox();
kombo.Name = "kombo";
kombo.Dock = DockStyle.Bottom;
kombo.Items.Add("Przycisk");
kombo.Items.Add("Etykeita");
kombo.Items.Add("Pole tekstowe");
Controls.Add(kombo);
Controls.Add(przycisk);
przycisk.Click += new EventHandler(przycisk_Click);
}
private void przycisk_Click(object sender, EventArgs e)
{
kombo.Items.Add("Panel"); //just an example
}
}
それを機能させる方法はありますか?
runat = "server"のマークアップで使用されているコントロールだけが、ページのクラス変数になります。それらは実際にはデザイナファイルで定義されています。
あなたがしたいことは、あなたがクラス変数を持っているところにクラスの中に以下のような何かを追加して、そしてあなたのページロード関数でkomboを割り当てることです。それから、それはあなたのクリックイベントハンドラに存在するでしょう。
// kombo is now scoped for use throughout this class
ComboBox kombo = null;
private void Form1_Load(object sender, EventArgs e)
{
Button przycisk = new Button();
przycisk.Name = "przycisk";
przycisk.Dock = DockStyle.Bottom;
przycisk.Text = "Wybierz";
// Assign to our kombo instance
kombo = new ComboBox();
kombo.Name = "kombo";
kombo.Dock = DockStyle.Bottom;
kombo.Items.Add("Przycisk");
kombo.Items.Add("Etykeita");
kombo.Items.Add("Pole tekstowe");
Controls.Add(kombo);
Controls.Add(przycisk);
przycisk.Click += new EventHandler(przycisk_Click);
}
private void przycisk_Click(object sender, EventArgs e)
{
// Using the kombo we created in form load, which is still referenced
// in the class
kombo.Items.Add("Panel"); //just an example
}
あなたが使用する必要がありますFindControl()最初にオブジェクトを見つけるためのメソッド。
private void przycisk_Click(object sender, EventArgs e)
{
ComboBox kombo = (ComboBox)FindControl("kombo");
kombo.Items.Add("Panel");
}