我有一个Windows.Form,并覆盖了ProcessCmdKey。但是,除了 F10 之外,这适用于所有F键。我试图在我的表格上按 F10 时搜索未调用ProcessCmdKey的原因。
有人可以告诉我如何找到原因吗?
最诚挚的问候,托马斯
答案 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
}