3

スペースキーを使用して、マウスを押したままの動作を変更できるようにしたいと思います。mousemoveよくわからないのですが、2つ(または3つ)のイベントハンドラー、、、keydownおよびの間の何らかの調整が必要だと想像していますkeyup。しかし、1つのイベントハンドラー内で完全に処理する方法があるかどうか疑問に思っています- mousemove

私ができることを望んでいることのアイデアを与えるためのサンプルコード...

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (Keyboard.KeyDown == Keys.Space)
                {
                    /* Do modified behavour for left mouse being held down while 
                    space is also held down */
                }
                else
                {
                    // Do normal behavour for left mouse being held down
                }

            }
        }

このようなことは可能ですか、それともキーダウンイベントハンドラーを使用してスペースキーの状態をクラス変数に保存し、マウス移動ハンドラーで確認する必要がありますか?

4

4 に答える 4

6

これは、Control.ModifierKeysとControl.MouseButtonsを使用して実行できます。ただし、shift、ctrl、altなどのケイに対してのみ機能します。

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {

        if ((Control.ModifierKeys & Keys.Shift) != 0)
        {
            if ((Control.MouseButtons & MouseButtons.Left) != 0)
            { // here you go

            }
        }
    }
于 2012-12-18T20:47:08.620 に答える
2

KeyDown-Eventに変数を設定し、MouseEventでチェックする必要があります。

bool buttonpressed = false;
private void KeyDown_Event(object s, System.Windows.Forms.KeyEventArgs e)
{
   if(e.KeyCode == KeyCode.Space)
      buttonpressed = true;
   else
      buttonpressed = false;
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (buttonPressed)
                {
                    /* Do modified behavour for left mouse being held down while 
                    space is also held down */
                }
                else
                {
                    // Do normal behavour for left mouse being held down
                }

            }
        }
于 2012-12-18T20:26:57.087 に答える
1

Keys.Spaceが状態にあるときを追跡し、イベントPressedでトリガーする変数がありますKeyUpKeyDown

 private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
      // Check if Key.Space pressed
      if(SpacePressed) {
           // Do something
      }
 }

 private void KeyPressed_Event(object sender, KeyEventArgs e) {
      // Check if Key.Space pressed
      if(e.Key == Key.Space) {
           SpacePressed = true;
      }
 }

 private void KeyRelease_Event(object sender, KeyEventArgs e) {
      // Check if Key.Space pressed
      if(e.Key == Key.Space) {
           SpacePressed = false;
      }
 }
于 2012-12-18T20:30:15.907 に答える
0

PInvokeを使用して、User32.dllでGetKeyStateを呼び出すことができます。

于 2012-12-18T21:41:10.060 に答える