某些组合,keydown事件不会中风

时间:2015-03-12 11:55:38

标签: c# winforms visual-studio-2010 keydown

我需要制作三个字母的快捷键组合(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事件的这种行为。如果我能用(ctrl + L + I)做同样的事情,也可以帮助我。感谢

2 个答案:

答案 0 :(得分:1)

您正在检查e.Keycode==Keys.L && e.KeyCode == Keys.I。我认为e.Keycode只包含单个密钥LI的值,但不能同时包含两个密钥,因此您的检查将始终失败。

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

答案 1 :(得分:1)

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

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);
    }