我有一個標準的WinForms應用程序。我想實現這樣的功能:用戶一次只能按住一個鍵盤按鈕
用戶可以按住一次只有一個鍵盤按鈕。如果他試圖按下一個按鈕,而按下另一個按鈕,則它不會得到結果。
PS:此行爲只傳播到我想要的表單,而不是所有形式的我的應用程序。
C#2.0 - 3.5,VS 2008
我有一個標準的WinForms應用程序。我想實現這樣的功能:用戶一次只能按住一個鍵盤按鈕
用戶可以按住一次只有一個鍵盤按鈕。如果他試圖按下一個按鈕,而按下另一個按鈕,則它不會得到結果。
PS:此行爲只傳播到我想要的表單,而不是所有形式的我的應用程序。
C#2.0 - 3.5,VS 2008
我得到了比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;
}
}
CurrentKey = Keys.None的添加是一個好的選擇。我不確定確切的語法是什麼,今天早上太急於查找它。 – Khadaji 2010-09-03 13:54:52
我很快撞了這一點,所以你可能鼓搗出來,使其工作,但它應該讓你開始。
將表單的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;
}
}
}
類似你們是不是要過濾控制鍵的東西嗎? (Ctrl,Shift,Alt) – Hapkido 2010-09-03 10:48:04
@Hapkido,no。我正在爲Windows創建自己的遊戲。用戶可以通過鍵盤彈奏。我不希望用戶可以同時按住幾個鍵。一次只有一個鍵。 – nik 2010-09-03 10:50:43