如何在Winforms中同步到不同的事件

时间:2012-09-27 09:34:46

标签: c# .net winforms event-handling

如果我有一个按钮可以执行某些操作,并且还有一个数据网格上的双击事件,我想做同样的事情,那么确保只需要维护一个函数的最佳方法是什么?

除了执行以下操作外,是否有任何花哨的C#方式表明两个事件要做同样的事情?

void button1_Click(...) { MyFunction(); }
void dataGrid1_DoubleClick(...) { MyFunction(); }
void MyFunction() {  // do stuff  }

3 个答案:

答案 0 :(得分:1)

我想您正在讨论DataGridView(WinForms),因此DataGridView中事件DoubleClick的签名和按钮控件上的Click事件的签名是相同的。 (一个EventHadler)。在这种情况下,您只需使用表单设计器设置相同的方法或手动绑定事件

dataGridView1.DoubleClick += new EventHandler(MyFunction);
button1.Click += new EventHandler(MyFunction);

当然,MyFunction方法应该与EventHandler

的预期签名相匹配
private void MyFunction(object sender, EventArgs e)
{
   // do your work
}

几分钟后回顾我的回答我想补充一下:

如果您发现自己处于需要使用发件人对象区分控件的情况(如Control c = sender as Control; if (c.Name == "someName")),我建议您回到第一个想法。调用一个常用方法,但为每个涉及的控件保持EventHandler分开。

答案 1 :(得分:0)

在窗体的设计器视图中使用VS您可以在控件的属性窗口中设置要调用每个控件的每个事件的过程。

image

答案 2 :(得分:0)

只是添加到Steve所说的内容,您需要在表单的Load事件中手动将这些事件绑定到您的函数,而不是在设计器的属性窗口中使用闪电下的事件,如下所示:

private void Form1_Load(object sender, EventArgs e)
{
    button1.Click += MyMethod;
    dataGridView1.DoubleClick += MyMethod;
}

void MyMethod(object sender, EventArgs e)
{
    //Do Stuff
}

此外,声明EventHandler类的新实例是多余的,因为将匿名方法引入C#,您可以直接将该事件指向该方法,如上所示。