0

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

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

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

3 回答 3

1

我想您说的是 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
}

几分钟后查看我的答案,我希望添加:

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

于 2012-09-27T09:44:54.750 回答
0

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

图片

于 2012-09-27T09:41:45.517 回答
0

补充一下史蒂夫所说的,您将希望在表单的 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# 中引入了匿名方法,您可以直接将事件指向方法,如上所示。

于 2012-09-27T10:14:12.973 回答