我收到了通知,我想通过点击屏幕上的任意位置或任何按键将其解雇。目前,我有两个看起来像这样的方法
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,我可以摆脱这个重复的代码吗?或者,如果我开始搞乱,我会不会混淆设计师?
答案 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();
}
}
这样,处理程序将与这两个事件兼容。但是我不建议这样做,因为我认为将事情清楚地分开是更清洁的。如果有一天你需要为鼠标事件和键盘事件做一些稍微不同的事情,那么如果使用单个处理程序,你将有更多的重构。