F10钥匙没有被抓住

时间:2011-07-12 12:50:49

标签: c# winforms events keyboard

我有一个Windows.Form,并覆盖了ProcessCmdKey。但是,除了 F10 之外,这适用于所有F键。我试图在我的表格上按 F10 时搜索未调用ProcessCmdKey的原因。

有人可以告诉我如何找到原因吗?

最诚挚的问候,托马斯

6 个答案:

答案 0 :(得分:8)

Windows以不同方式处理 F10 。 “备注”部分here on MSDN

中给出了解释

答案 1 :(得分:1)

我刚刚在.NET 4上使用Windows窗体测试了此代码,并按预期获得了消息框。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F10)
    {
        MessageBox.Show("F10 Pressed");
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

答案 2 :(得分:1)

可能是我遇到了你的问题,所以试着猜测:

您是否将WindowsForm的KeyPreview属性设置为true

这将使WindowsForm能够继续按下按键事件,然后再将其转移到在精确时刻保持关注UI的控件。

请告诉我它是否有效。

问候。

答案 3 :(得分:0)

在我的情况下,我试图将e.key与system.windows.input.key.F10匹配并且它不起作用(尽管F1通过F9做了)

Select Case e.Key

Case is = Key.F10
... do some stuff

end select

然而,我把它改为

Select Case e.Key

Case is = 156
... do some stuff

end select

并且有效。

答案 4 :(得分:0)

如果在WPF应用程序中遇到此问题,this blog post显示如何捕获F10密钥:

malloc()

答案 5 :(得分:0)

对,因为这是一个特殊键,所以必须添加

e.Handled = true; 

它告诉呼叫者您已处理它。

因此,您的代码可能类似于:

switch (e.Key)
...
case Key.System:
    if (e.SystemKey == Key.F10)
    {
        e.Handled = true;
        ... processing
    }