2015-09-07 89 views
-4

我想在C# 使用左或右控制/移位/ ALT,但是當我鍵入如何判斷在C#中是否正在點擊右Ctrl/Shift/Alt或Left?

private void Form1_KeyDown(or KeyPress)(object sender, KeyEventArgs e) 
    { 
     if (e.Modifiers == Keys.RControlKey) //(or e.KeyCode) 
     { 
      //Code 
     } 
    } 

,但它不工作...同樣使用Shift和Alt

那麼,什麼是這裏錯了嗎?

+0

爲什麼不使用[KeyEventArgs.Control](https://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.control(v = vs.110).aspx)屬性? –

+0

修飾符狀態不受使用左鍵或右鍵的影響。他們以完全相同的方式修改下一個按鍵。如果要檢測出右側控制鍵,那麼你需要的,如果(e.KeyCode == Keys.RControlKey) –

+0

這是不是工作壓力太大@HansPassant:/ – Amr

回答

0

在KeyEventArgs有屬性Ctrl鍵,Alt鍵和Shift鍵,顯示是否被按下這些按鈕。 或者你還可以檢查(Keyboard.IsKeyDown(Key.P)& & Keyboard.IsKeyDown(Key.LeftCtrl)){}在事件處理。

1

不知道這解決您的問題或沒有。

private void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    switch(e.KeyCode) 
    { 
    case Keys.LMenu: 
    //Your code for Left Alt Key 
    break; 
    case Keys.LControlKey: 
    //Your code for Left Control Key 
    break; 
    case Keys.LShiftKey: 
    //Your code for Left Shift Key 
    break; 
    case Keys.RControlKey: 
    //Your code for Right Control Key 
    break; 
    case Keys.RMenu: 
    //Your code for Right Alt Key 
    break; 
    case Keys.RShiftKey: 
    //You code for Right Shift Key 
    break; 
    } 
} 

KeyUp事件:

https://msdn.microsoft.com/en-us/library/system.windows.forms.control.keyup(v=vs.110).aspx

鍵:

https://msdn.microsoft.com/en-US/library/system.windows.forms.keys(v=vs.110).aspx

+0

不工作:/抱歉:/ – Amr

+0

@Amr你着眼於形式? 我想你可能會專注於表單中的一些控件。 –

+0

@Amr如果需要,請將此KeyUp事件添加到每個可能的控件中。 –

0

例如,如果按RControlKey + A,它會創建一些事件。

private void watcher_keyDown(object sender, KeyEventArgs e) 
{ 
    Console.WriteLine("keyDown: " + e.KeyData.ToString()); 
} 

private void watcher_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    Console.WriteLine("keyPress: " + e.KeyChar.ToString()); 
} 

public void watcher_KeyUp(object sender, KeyEventArgs e) 
{ 
    Console.WriteLine("keyUp: " + e.KeyData.ToString()); 
} 

keyDown: RControlKey 
keyDown: A, Control 
keyPress: 
keyUp: A, Control 
keyUp: RControlKey, Control 

從第一個或最後一個事件,你可以知道哪一個(左或右)被點擊。這意味着您可能需要緩存關鍵代碼,因爲有2個keyUp/keyDown事件。

相關問題