動的に作成されたオブジェクトにEventHandlerをフックしようとしています。このサンプルでは、私は単純なウィンドウ.Net TabControlを使用して動的オブジェクトを格納します。簡単にするために、私はButtonとClickイベントを使用します。 主なポイントは、それぞれのタブページをクリックするとの異なる出力を生成する必要があります。動的オブジェクトのC#イベント
public partial class Form1 : Form
{
int letter = 65;
private void simpleButton1_Click(object sender, EventArgs e)
{
TabPage newPage = new TabPage();
tabControl1.TabPages.Add(newPage);
Button btn = new Button();
newPage.Controls.Add(btn);
btn.Click += (object s, EventArgs ee) =>
{
// Button on FirstPage should produce "Test A"
// Button on SecondPage should produce "Test B"
Debug.WriteLine("Test " + (char)letter);
};
letter++;
}
}
ただし、iは任意のページをクリックした方のボタンは、最終ページの出力(すなわち4つのTabPages、すべてのボタンは、「テストD」を生成クリック)を生成します。参照ポインタボタンbtnがすべてのページのボタンのすべてのインスタンスを指しているかのように感じました。
私の仮定:
はButton btn = new Button();
ボタンの新しいインスタンスへのポインタBTNポイントごとにこの行が実行されないでしょうか?その意味で:
btn.Click += (object s, EventArgs ee) =>
btn.Clickは新しく作成されたButtonのインスタンスのEventHandlerになるはずですか?ポインタbtnがまだボタンのすべてのインスタンスを参照しているかのようです。
この問題について私に教えてください。前もって感謝します。
ありがとう!私はローカル変数の宣言が割り当てられた値をコピーするのを忘れていました。それはうまくいった! – Suwandy