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



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

除了执行以下操作之外,是否有任何花哨的 C# 方法来指示两个事件要做同样的事情?

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

我想你说的是DataGridView(WinForms),所以DataGridView中事件DoubleClick的签名和按钮控件上的Click事件的签名是相同的。(一个事件哈德勒)。 在这种情况下,您可以简单地使用表单设计器设置相同的方法或手动绑定事件

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")),我真的建议您回到第一个想法。调用通用方法,但为所涉及的每个控件保持事件处理程序的分离。

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

图像

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

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

此外,自从 C# 引入了匿名方法以来,声明 EventHandler 类的新实例一直是多余的,您只需将事件直接指向该方法,如上所示。

相关内容

  • 没有找到相关文章

最新更新