Shift + F10 在文本框键按下事件中

本文关键字:事件 F10 文本 Shift | 更新日期: 2023-09-27 18:24:10

我有一个带有文本框的表单。

myTB.KeyDown += new KeyEventHandler(this.myTB_KeyDown);

在这种情况下,我可以让Keys.Apps打开上下文菜单。

现在上下文菜单的另一个快捷方式是 Shift + F10

是否有可能在KeyDown事件中捕捉到这一点?

我可以实现任何逻辑来捕获这些密钥?

到目前为止,我看到的是,当按下 Shift 键时,那个时间本身就会调用 KeyDown 事件,并且无法同时检查 ShiftF10

Shift + F10 在文本框键按下事件中

如果我正确理解您的问题,并且您想禁用默认的 Shift+F10 菜单并自己处理这些组合,那么处理KeyDown事件并检测组合和设置e.Handled=true;就足够了:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if(e.KeyCode==  Keys.F10 && e.Shift==true)
    {
        //Shift +  F10 pressed, do what you need.
        e.Handled = true;
    }
}

您还可以通过将TextBox的属性设置为 false 来禁用将显示的默认上下文菜单ShortcutsEnabled

这是检查 shift + F10 的一种非常安全的方法

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.F10 | Keys.Shift))
        {
            if (txtBox1.Focused)
            {
                txtBox1.Text = "Captured!";
                return true;
            }
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

描述:
这将捕获每个击键。 从那里将检查击键是否为 Shift+F10,单管的行为就像&&. 之后,它会进行简单的检查,以查看您计划让事件发生的文本框是焦点还是主动控制。 如果它未能通过这些检查中的任何一个,它将击键信息发送到return base.ProcessCmdKey(ref msg, keyData);这将为击键提供正常功能,而无需任何覆盖检查或您可能想要对捕获的击键执行的任何操作。