1

私はに取り組んでおり、このコントロールCustomControlに登録したいと思います。このコントロールが追加されるに、をModifierKeysすでに設定しKeyPerviewました。TrueForm

これで名前がBoolean付けられました。_ctrlこのブール値はtrue、キーが押されているときであり、キーが離されているときControlである必要があります。falseControl

私はこれを以下のコンデで達成しようとしました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 に答える