2010-09-03 134 views
1

我有一個標準的WinForms應用程序。我想實現這樣的功能:用戶一次只能按住一個鍵盤按鈕

用戶可以按住一次只有一個鍵盤按鈕。如果他試圖按下一個按鈕,而按下另一個按鈕,則它不會得到結果。

PS:此行爲只傳播到我想要的表單,而不是所有形式的我的應用程序。

C#2.0 - 3.5,VS 2008

+0

類似你們是不是要過濾控制鍵的東西嗎? (Ctrl,Shift,Alt) – Hapkido 2010-09-03 10:48:04

+0

@Hapkido,no。我正在爲Windows創建自己的遊戲。用戶可以通過鍵盤彈奏。我不希望用戶可以同時按住幾個鍵。一次只有一個鍵。 – nik 2010-09-03 10:50:43

回答

1

我得到了比Khadaji

private Keys CurrentKey = Keys.None; 

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (CurrentKey == Keys.None) 
    { 
     CurrentKey = e.KeyData; 
     // TODO: put your key trigger here 
    } 
    else 
    { 
     e.SuppressKeyPress = true; 
    } 

} 

private void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == CurrentKey) 
    { 
     // TODO: put you key end trigger here 
     CurrentKey = Keys.None; 
    } 
    else 
    { 
     e.SuppressKeyPress = true; 
    } 

} 
+0

CurrentKey = Keys.None的添加是一個好的選擇。我不確定確切的語法是什麼,今天早上太急於查找它。 – Khadaji 2010-09-03 13:54:52

0

我很快撞了這一點,所以你可能鼓搗出來,使其工作,但它應該讓你開始。

將表單的KeyPreview設置爲true。放入一個KeyDown事件和KeyUp事件。

Keys MyKey; 
bool KeyIsDown = false; 
private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (KeyIsDown) 
    { 
     e.Handled = true; 
    } 
    else 
    { 
     MyKey = e.KeyData; 
    } 
} 

private void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (KeyIsDown) 
    { 
     if (e.KeyData == MyKey) 
     { 
      KeyIsDown = false; 
     } 
    } 
}