F10键没被抓住

发布于 2024-11-19 18:24:15 字数 178 浏览 2 评论 0原文

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

有人可以给我一个提示,告诉我如何找到原因吗?

最好的问候,托马斯

I have a Windows.Form and there overriden ProcessCmdKey. However, this works with all of the F-Keys except for F10. I am trying to search for the reason why ProcessCmdKey is not called when I press F10 on my Form.

Can someone please give me a tip as to how I can find the cause?

Best Regards, Thomas

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

云淡月浅 2024-11-26 18:24:16

Windows 对 F10 的处理方式有所不同。 MSDN 上的“备注”部分给出了解释

Windows treats F10 differently. An explanation is given in the "Remarks" section here on MSDN

维持三分热 2024-11-26 18:24:16

我刚刚在 .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);
}

I just tested this code with Windows Forms on .NET 4 and I got the message box as expected.

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);
}
一向肩并 2024-11-26 18:24:16

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

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

这将使 WindowsForm 能够在按键事件泵送到在该特定时刻将焦点保持在 UI 上的控件之前处理按键事件。

请告诉我是否有效。

问候。

May be I got your problem, so trying to guess:

Did you set KeyPreview property of your WindowsForm to true ?

This will enable possiblity to WindowsForm proceed keypress events before they pump to the control that holds the focus on UI in that precise moment.

Let me know if it works, please.

Regards.

家住魔仙堡 2024-11-26 18:24:16

就我而言,我试图将 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

并且它起作用了。

In my case I was trying to match e.key to system.windows.input.key.F10 and it didn't not work (althougth F1 thru F9 did)

Select Case e.Key

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

end select

however, I changed it to

Select Case e.Key

Case is = 156
... do some stuff

end select

and it worked.

拔了角的鹿 2024-11-26 18:24:16

如果在 WPF 应用程序中遇到此问题,这篇博文展示了如何捕获 F10 键:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
        if (e.SystemKey == Key.F10)
        {
            YourLogic(e.SystemKey);
        }

        switch (e.Key)
        {
            case Key.F1:
            case Key.F2:
        }
}

If running into this issue in a WPF app, this blog post shows how to capture the F10 key:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
        if (e.SystemKey == Key.F10)
        {
            YourLogic(e.SystemKey);
        }

        switch (e.Key)
        {
            case Key.F1:
            case Key.F2:
        }
}
后来的我们 2024-11-26 18:24:16

是的,由于这是一个特殊的键,您必须添加

e.Handled = true; 

它,告诉调用者您已经处理了它。

因此,您的代码可能如下所示:

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

Right, and as this is a special key you must add

e.Handled = true; 

it tells the caller that you handled it.

So, your code could look like:

switch (e.Key)
...
case Key.System:
    if (e.SystemKey == Key.F10)
    {
        e.Handled = true;
        ... processing
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文