我正在制作一个Windows窗体,我试图手动将一个方法绑定到myButton的click事件,如下所示:
public Form1()
{
InitializeComponent();
myButton.Click = new EventHandler(ShowMessage("You clicked my button!"));
}
private void ShowMessage(string message)
{
MessageBox.Show(message);
}
Run Code Online (Sandbox Code Playgroud)
正如你们有些人猜测的那样,编译器并不喜欢这样.我不知道为什么,因为我习惯于能够在Javascript中做这样的事情:
document.getElementById("myButton").onclick = function(){showMessage("You clicked my button")};
function showMessage(message) {
alert(message);
}
Run Code Online (Sandbox Code Playgroud)
我混淆了它并最终做了一件非常丑陋的事情涉及这样的全局变量:
string message = "";
public Form1()
{
InitializeComponent();
message = "You clicked my button!";
myButton.Click += ShowMessage;
}
private void ShowMessage(object sender, EventArgs e)
{
MessageBox.Show(message);
}
Run Code Online (Sandbox Code Playgroud)
这是我的两个问题:首先,有更清洁的方法吗?其次,为什么事件方法必须分配一个+=而不仅仅是一个=?
事件处理程序必须添加到事件中,+=因为事件可能有多个其他委托对您的特定代码未知.纯粹的赋值意味着能够删除其他相关代表,这是您不应该作为事件的客户端做的事情.
此外,您可能希望利用匿名委托来完成任何形式的参数绑定.例如:
myButton.Click += delegate(object sender, EventArgs e) {
MessageBox.Show("You clicked my button!");
};
Run Code Online (Sandbox Code Playgroud)
你也可以使用lambda.
myButton.Click += (sender, e) => {
MessageBox.Show("You clicked my button!");
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10085 次 |
| 最近记录: |