【发布时间】:2017-10-06 18:38:31
【问题描述】:
我正在尝试将 EventHandler 挂接到动态创建的对象上。在这个示例中,我使用简单的 windows .Net TabControl 来包含动态对象。为简单起见,我使用 Button 及其 Click 事件。 重点是每个 TabPage 上的按钮点击应该产生不同的输出。
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++;
}
}
但是,无论我在任何页面上单击哪个按钮都会产生最后一页的输出(即 4 个 TabPages,所有按钮单击都会产生“Test D”)。感觉好像引用指针 Button btn 指向每个页面上的所有按钮实例。
我的假设:
Button btn = new Button();
每次执行此行时,指针 btn 不会指向 Button 的新实例吗?从这个意义上说:
btn.Click += (object s, EventArgs ee) =>
btn.Click 应该是新创建的 Button 实例的 EventHandler,对吧?似乎指针 btn 仍然引用 Button 的所有实例。
请在这件事上给我启发。提前谢谢你。
【问题讨论】: