如何检测控件的点击事件是由鼠标、键盘还是其他方式触发的?

3

如何判断Control.Click事件是由鼠标还是键盘触发的?

编辑:

处理MouseClickKeyPress对我没有用,因为我不知道是否有其他东西触发了点击(例如PerformClick)。


“Click”事件也可以通过“PerformClick”触发,而不一定需要键盘或鼠标输入。 - Ben Voigt
为什么要问这样的问题,当你已经了解委托和高级内容...而且它可能既不是这个也不是那个。 - Marino Šimić
@Ben:我忘了提到“其他”类别,是的——这实际上是我问的原因,因为我不能忽略其他类型的点击。(@Marino:正如Ben所提到的,这不是一个那么简单的问题。) - user541686
2个回答

6
你无法直接实现。使用Control.MouseClick事件和Control.KeyPress事件,以便你可以确定事件的来源。请记住,在具有焦点的控件上按下空格键和Ctrl +键也可以生成对按钮的单击。

1
如果按键一直被按下,Control.KeyPress 会不断被触发。我认为最好使用 Control.KeyUp - Jeff Ogata

4
你可能无法直接获得事件的来源,但是如果需要,你可以使用MouseClick和KeyPress。
void handler(object sender, EventArgs e)
{
    bool mouseEvent = (e is MouseEventArgs);
    bool keyEvent = (e is KeyEventArgs);
    bool performClick = (e is EventArgs) && !keyEvent && !mouseEvent;
}

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