keydown 事件不会为某些组合敲击

keydown event does not stroke for some combination

我需要制作三个字母的快捷键组合(Ctrl+L+I) 我尝试了很多但没有运气。 我这样试过

private void MDIParent2HOME_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.Keycode==Keys.L && e.KeyCode == Keys.I)
            {//login
                    Form1 chilform = new Form1();
                    chilform.MdiParent = this;
                    chilform.Show();
            }
       }

但这没有用。

然后我更改了我的组合键 (ctrl+ALt+L) 并以同样的方式进行了尝试

private void MDIParent2HOME_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.Alt && e.KeyCode == Keys.L)
            {//login
                {
                    Form1 chilform = new Form1();
                    chilform.MdiParent = this;
                    chilform.Show();
                }
            }
        }

我想知道它是否完美。我无法理解任何人知道 KeyDown 的这种行为的原因 event.Also 如果我可以用 (ctrl+L+I) 做同样的事情,请帮助我。谢谢

您正在检查 e.Keycode==Keys.L && e.KeyCode == Keys.I。我认为 e.Keycode 只包含一个键的值,LI,但不能同时包含这两个键,所以你的检查总是会失败。

请注意,AltShiftCtrl 是修饰符,其处理方式与其他键略有不同。

嗯...我认为我的解决方案有效

private bool IfSeen;

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (IfSeen)
        {
            if (keyData == (Keys.Control | Keys.I))
            {
                MessageBox.Show("You pressed Ctrl+L+I");
            }
            IfSeen= false;
            return true;
        }
        if (keyData == (Keys.Control | Keys.L))
        {
            IfSeen= true;
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }