1

我正在研究一个CustomControl,我想ModifierKeys在这个控件中注册。我已经将这个控件添加到其中KeyPerviewTrueForm

现在我有一个Boolean命名_ctrl,我希望这个布尔值是trueControl按住键时,它应该是falseControl释放键时。

我试图用下面的 conde 来实现这一点,CustomControl但没有成功!

private bool _ctrl = false;

private void MyCustomControl_KeyDown(object sender, KeyEventArgs e)
{
    if(e.KeyCode == Keys.Control)
    {
        _ctrl = true;
    }
}

private void MyCustomControl_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Control)
    {
        _ctrl = false;
    }
}

任何提示/解决方案都将得到应用!

更新

好的,我决定在表单本身中执行按键向下和向上事件:

        private void MainForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Modifiers == Keys.Control)
        {
            projectBrowser.ControlKeyIsDown = true; //bool in MyCustomControl
            MessageBox.Show("CTRL is PRESSED");
        } 
     }

    private void MainForm_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Modifiers == Keys.Control)
        {
            projectBrowser.ControlKeyIsDown = false; //bool in MyCustomControl
            MessageBox.Show("CTRL is DEPRESSED");
        } 
    }

现在,KeyDown 事件检测到控制键并显示消息框。但是该KeyUp事件不起作用,并且不显示消息框。有什么问题?

KeyUp如果我像这样更改事件,似乎键被检测到:

private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.LControlKey || e.KeyCode == Keys.RControlKey || e.KeyCode == Keys.ControlKey || e.KeyCode == Keys.Control)
    {
        projectBrowser.ControlKeyIsDown = false;
        e.Handled = true;
    }
}
4

1 回答 1

2

您可以尝试调用该Control.ModifierKeys属性:

protected override void OnKeyDown(KeyEventArgs e) {
  if (Control.ModifierKeys == Keys.Control) {
    MessageBox.Show("I am pressing control.");
  }
  base.OnKeyDown(e);
}

如果您在 KeyDown 事件上抛出 MessageBox,则不会调用 KeyUp 事件。

于 2012-08-20T12:37:51.477 回答