2016-04-21 28 views
2

好吧,所以我一直在研究這個控件近一個月,我遇到的其中一個問題是如果我按下CTRL鍵通過它自己註冊,如果我通過它自己註冊空格鍵。我試圖分開這兩個,我試圖在相同的if聲明中使用它們。兩者都不成功。C#爲什麼我的控件不接受KeyDown事件中的多個鍵

我第一次嘗試這樣的

protected override void OnKeyDown(KeyEventArgs e) 
    { 
     // base.OnKeyDown(e); 
     if (_isEditing) 
     { 
      if (e.KeyData == Keys.Delete) 
      { 
       if (_selectedObj != null) 
       { 
        DeleteSelectedObject(); 
       } 
      } 
     } 
     if (e.Control && e.KeyData == Keys.Space) 
     { 
      _isEditing = !_isEditing; 
      Invalidate(); 
     } 
    } 

現在,如果我刪除Ctrl或從它工作正常的公式計算「空間」鍵。所以,我試圖把它們分開,並使用Console.WriteLine()作爲一個騙子當按下鍵和蜱不會被顯示,除非我註釋掉CTRL子句告訴我想出了

protected override void OnKeyDown(KeyEventArgs e) 
    { 
     // base.OnKeyDown(e); 
     if (_isEditing) 
     { 
      if (e.KeyData == Keys.Delete) 
      { 
       if (_selectedObj != null) 
       { 
        DeleteSelectedObject(); 
       } 
      } 
     } 
     if (e.Control) 
     { 
      Console.WriteLine(DateTime.Now.ToShortTimeString()); 
      if (e.KeyData.Equals(Keys.Space)) 
      { 
       _isEditing = !_isEditing; 
       Console.WriteLine(DateTime.Now.Ticks.ToString()); 
      } 
      Invalidate(); 
     } 
    } 

。我在哪裏錯了?

回答

2

嘗試類似

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Space) 
{ 

} 
+0

謝謝。快速和容易的是我一直在尋找和這工作。 –

0

您不會在KeyDown事件中獲得修飾符。而是嘗試通過以下方式之一知道改性劑(按Ctrl,Shift鍵,Alt鍵),按下與否:

  1. Keyboard.IsKeyDown

    if ((Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)) 
        && e.KeyData == Keys.Space){} 
    
  2. 檢查Keyboard.Modifiers

    if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
        && e.KeyData == Keys.Space){} 
    
相關問題