动态添加控件后如何为其添加事件

20

我正在开发一个winforms应用程序,我动态添加了一些控件(如Button)。我想为创建的按钮添加事件;我该如何实现?另外,有人能给我推荐一本涵盖所有winforms主题的C#书籍吗?


4
书籍:我喜欢《C#入门经典》,但我认为任何一本C#书都会涵盖这个内容。 - Niki
2个回答

33
// create some dynamic button
Button b = new Button();
// assign some event to it
b.Click += (sender, e) => 
{
    MessageBox.Show("the button was clicked");
};
// add the button to the form
Controls.Add(b);

1
谢谢,请解释一下'+='和'=>',或者给我一个链接,让我可以阅读更多相关信息。 - salman
4
+= 运算符分配一个事件处理程序。你应该阅读有关事件的内容 - Darin Dimitrov
4
=> 表示一个 lambda 表达式。你应该了解 lambda 表达式匿名方法 - Darin Dimitrov

20

我完全同意Darin的答案,这是添加动态事件的另一种语法

private void Form1_Load(object sender, EventArgs e)
{
    Button b = new Button();
    b.Click += new EventHandler(ShowMessage);
    Controls.Add(b);
}

private void ShowMessage(object sender,EventArgs e)
{
    MessageBox.Show("Message");
}

我们如何在 ShowMessage 中访问 b 的属性? - Sujoy
1
@Sujoy 参数 sender 是 Button。只需将 sender 强制转换为 Button,然后就可以访问其属性了。 - Serkan Hekimoglu
@Serken 抱歉,我的意思是我们如何从其他函数访问 b。我想我们需要在添加按钮后给它命名,这样我们才能以后访问它。 - Sujoy
@Sujoy 把 Button 作为全局变量保留怎么样? - Serkan Hekimoglu
@Serken,那样做是不可行的。如果我创建了100个按钮,我将需要100个全局变量。我想到,我们需要给按钮命名以便以后访问,而不是创建全局变量。 - Sujoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接