使用相同的事件处理程序处理多个事件

时间:2014-07-10 14:34:24

标签: c# .net winforms

我收到了通知,我想通过点击屏幕上的任意位置或任何按键将其解雇。目前,我有两个看起来像这样的方法

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,这不起作用。

如果我还没有使用args,我可以摆脱这个重复的代码吗?或者,如果我开始搞乱,我会不会混淆设计师?

1 个答案:

答案 0 :(得分:4)

只需将代码解压缩到您从两个事件处理程序调用的新方法:

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();
    }
}

这样,处理程序将与这两个事件兼容。但是我不建议这样做,因为我认为将事情清楚地分开是更清洁的。如果有一天你需要为鼠标事件和键盘事件做一些稍微不同的事情,那么如果使用单个处理程序,你将有更多的重构。