2010-02-09 24 views
2

我使用KeyDown和KeyUp事件進行控制,如下所示。我遇到的問題是在KeyDown中'x'爲TRUE,但在KeyUp中始終爲FALSE。我正在嘗試檢測Alt鍵(正如您可能已經猜到的那樣)。在Control.KeyUp事件中檢測到Alt鍵的問題

有沒有我不知道的gottcha。我的意思是,當我按下Alt鍵時,它會檢測到它確定,但是在鍵入時它是錯誤的。

任何建議/想法

感謝

private void MyControl_KeyDown(object sender, KeyEventArgs e) 
    { 
     bool x; 
     x = ((int) (e.KeyData & Keys.Alt) != 0); 
     x = (e.KeyData & Keys.Alt) == Keys.Alt; 
     x = e.Alt; 
    } 
    private void MyControl_KeyUp(object sender, KeyEventArgs e) 
    { 
     bool x; 
     x = ((int) (e.KeyData & Keys.Alt) != 0); 
     x = (e.KeyData & Keys.Alt) == Keys.Alt; 
     x = e.Alt; 
    } 

回答

5

你們是不是要檢測ALT + [字母]事件?是這樣的,試試這個:

 private void YourControl_KeyDown(object sender, KeyEventArgs e) 
     { 
      if((e.Alt) & (e.KeyCode == Keys.X)) 
      { 
      MessageBox.Show("Alt-X pressed"); 
      } 
     } 

對於剛剛Alt鍵,試試這個:

private void YourControl_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Menu) 
     { 
      //YourCode 
      e.Handled = true; 
     } 
    } 

    private void YourControl_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyData == Keys.Menu) 
     { 
      //YourCode 
      e.Handled = true; 
     } 
    } 
+0

不,我只是想檢測Alt鍵是所有,沒有組合。 – ababeel 2010-02-09 06:24:07

+1

我在上面的答案中添加了代碼。因爲Alt服務於顯示菜單的目的,所以你必須做一個e.Handled = true,除非你只想捕獲50%的Alt鍵。 KeyUp的檢查與KeyDown稍有不同(參見上文)。那對你有用嗎? – bluecoder 2010-02-09 07:28:05

+0

謝謝你的工作。 – ababeel 2010-02-09 22:36:37

1

我希望你不只是設置在你們班布爾成員變量響應Alt鍵鍵被按下。

如果您想知道在執行代碼以響應其他事件(例如鼠標事件)時Alt鍵是否關閉,請使用Control.ModifierKeys屬性,因爲它更可靠。這也意味着你沒有冗餘成員變量。

如果您實際上試圖檢測用戶是否僅按了一個修改鍵,那麼@ bluecoder的解決方案可能就是您想要的。

1

如果您想要檢測真正的按鍵按下(Alt或任何其他鍵),您可以使用此代碼。此代碼在KeyUp,KeyDown和其他鍵事件中工作

private void YourControl_KeyDown(object sender, KeyEventArgs e) 
{ 
    Key _key = e.Key != Key.System ? e.Key : e.SystemKey; 
    // _key is your real pressed key 
}