2012-12-18 67 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 

      } 
     } 
    }