使用相同的事件处理程序处理多个事件
本文关键字:处理 事件 程序 事件处理 | 更新日期: 2023-09-27 18:12:32
我有一个通知,我想通过点击屏幕上的任何地方或按任何键来取消它。目前,我有两个方法,像这样
private void Dismiss(object sender, MouseEventArgs e)
{
if(dismissable && dismissSeconds<=0)
{
FadeOut();
}
}
private void Dismiss(object sender, KeyEventArgs e)
{
if (dismissable && dismissSeconds <= 0)
{
FadeOut();
}
}
我知道,如果两个对象发送相同的args类型,你可以在属性窗口中选择相同的事件处理程序,但因为一个返回KeyEventArgs和另一个返回MouseEventArgs,那不起作用。
如果我不使用参数,我可以摆脱这个重复的代码吗?或者如果我这样做会不会让设计师感到困惑?
只需将代码提取到您从两个事件处理程序中调用的新方法:
private void Dismiss(object sender, MouseEventArgs e)
{
Dismiss();
}
private void Dismiss(object sender, KeyEventArgs e)
{
Dismiss();
}
private void Dismiss()
{
if (dismissable && dismissSeconds <= 0)
{
FadeOut();
}
}
注意可以声明一个事件处理程序,通过指定EventArgs
作为参数类型:
private void Dismiss(object sender, EventArgs e)
{
if (dismissable && dismissSeconds <= 0)
{
FadeOut();
}
}
这样,处理程序将与两个事件兼容。然而,我不建议这样做,因为我认为把东西清楚地分开会更干净。如果有一天您需要为鼠标事件和键盘事件做一些稍微不同的事情,那么如果您使用单个处理程序,您将需要进行更多的重构。