C#将2个事件合并到一个方法中

5

我对编程还比较陌生,正如您很快就会看到的...
我有两个事件,它们执行相同的代码。目前我对DataGridView有以下伪代码:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)  
{
   string abc = "abc";
}

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)  
{
   string abc = "abc";
}

有没有一种方法将这些合并为一个事件?有更好的方法吗?

5个回答

9
为什么不只有一个方法来映射两个事件?
private void dgv_CellEvent(object sender, DataGridViewCellEventArgs e)
{
    string abc = "123";
}

// In the event mapping

dgv.CellEnter += dgv_CellEvent;
dgv.CellClick += dgv_CellEvent;

看起来这是最简洁、"正确" 的方法。谢谢! - muhan

6

好的,简短的回答是可以的。将方法的核心部分放到自己的方法中,然后只需让onclick事件调用该方法即可。这样,如果需要更改代码,您只需要在一个地方进行更新。

有一百种不同的方法来做到这一点,而这可能是最简单的方法。

因此,创建类似于以下内容的东西:

protected void MyNewMethod()
{
    string abc = "123";
}

然后你的其他方法将像这样调用它:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)
{ 
    MyNewMethod(); 
}

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{ 
    MyNewMethod(); 
}

选项2

只需从标记中调用相同的方法即可。您实际上只需要其中一个方法,而标记中的事件可以调用相同的方法。


1
关于选项2,该问题似乎与Windows Forms有关,它没有标记。 - Scott Whitlock
啊……抱歉,我没注意到。仍旧适用,只需选择控件,弹出属性窗口,然后选择“选项卡”事件,接着从下拉菜单中选择同一事件即可。 - YetAnotherDeveloper
1
我认为这是“正确的做法”。 这样做的一个好处是,如果事件具有不同的签名,你仍然可以调用MyNewMethod()。 - stone

2
在属性窗口(使用C# Express)中,您可以从下拉列表中选择事件处理程序,或手动输入方法名称。签名只需要匹配即可。我假设在VS中也是相同的。

1

最简单的方法是这样做:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)
{ 
    dgv_CellClick(sender, e); 
}

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{ 
    string abc = "abc"; 
}

虽然IDE自动生成了连接事件的代码,你也可以修改它们以便将它们都连接到同一个事件处理程序,但我不喜欢去改动生成的代码。

在ASP.NET或WPF中,你的数据网格或类似控件有一个属性来确定事件处理程序的名称,所以你可以将它们都指向那个属性。

如果你使用VB.NET而不是C#进行编程,你只需要编写一个方法并使用Handles关键字来表示这个方法处理两个事件。


3
或者您可以将事件处理程序中的内容重构为另一个方法,并让两个事件处理程序调用该方法。 - Scott Whitlock
你比我早回答了3秒钟 :) - mlevit
@mlevit - 我真的冒险了,提交后我还编辑了一次! - Scott Whitlock

1
你可以尝试以下方法:
private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    string abc = "abc";
}

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{
    dgv_CellEnter(sender, e);
}

这样当你单击或按下回车键时,它将运行相同的方法。

谢谢


3
最好采用中间方法,而不是调用不同控件的事件处理程序。 - Gregory

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