2012-12-18 69 views
1

我希望能够使用空格键修改鼠标按住时的行为。不知道更好,我想象它涉及两个(或三个)事件处理程序之间的某种协调 - mousemove,​​和keyup。但我想知道是否有办法在一个事件处理程序中完全处理它 - mousemove如何在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 
       } 

      } 
     } 

是这样的可能,否则我将不得不在空格键的状态保存到一个类变量使用keydown事件处理程序并用鼠标移动处理程序检查它?

回答

1

您应该设置一个变量在你的KeyDown-事件,并检查它的MouseEvents:

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 
       } 

      } 
     } 
+0

谢谢。我知道我可以这样做,但认为它可能稍微有点儿错误处理与三个单独的事件处理程序的组合物理行动,但现在它已经实现它完美的作品。 – MrVimes

1

我不得不跟踪时Keys.Space是在Pressed状态的变量,然后用KeyUp触发它, KeyDown事件

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

它可以使用Control.ModifierKeys & Control.MouseButtons来完成。但只适用于像shift,ctrl和alt之类的kays。

private void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 

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

      } 
     } 
    }