2013-09-29 57 views
0

盡力爲我的形式如何使用KeyPressEvent以正確的方式

代碼

private void FormMain_KeyPress(object sender, KeyPressEventArgs e)   
    { 
     if (e.KeyChar == (char)Keys.Enter) 
     { 
      MessageBox.Show("e"); 
     } 
    } 

作品一個鍵創建熱鍵,但如果我whant使用像CTRL + N組合鍵,嘗試使用if (e.KeyChar == (char)Keys.Enter && e.KeyChar == (char)Keys.N) - 但它不起作用。我是對的 - 使用這樣的密鑰組合代碼?

編輯

Edit

此代碼捕獲僅第一個按鍵,而不是組合 - 所以,如果我按Ctrl + Enter - 代碼捕獲CTRL但不是Enter鍵 - 試圖創建額外的if但 - 導致相同的...從KeyPressKeyDown


更改事件 - 現在它的工作

回答

2

對於Control和另一個字母的其他組合,有一個有趣的事情,e.KeyChar將有不同的代碼。例如,通常e.KeyChar = 'a'將具有97的代碼,但在按a(或A)之前按Control時,實際代碼爲1。因此,我們有這樣的代碼來處理其他組合:

private void FormMain_KeyPress(object sender, KeyPressEventArgs e)   
{ 
    //Pressing Control + N 
    if(e.KeyChar == 'n'-96) MessageBox.Show("e"); 
    //Using this way won't help us differentiate the Enter key (10) and the J letter 
} 

您還可以使用KeyDown事件用於此目的。 (其實KeyDown更合適)。由於它支持包含修飾鍵的組合信息和其他文本鍵值的KeyData

private void FormMain_KeyDown(object sender, KeyEventArgs e){ 
    //Pressing Control + N 
    if(e.KeyData == (Keys.Control | Keys.N)) MessageBox.Show("e"); 
} 
+0

嘗試 - modifierKeys - 好吧,而不是N鍵得到一些不同的結果 - 請參閱編輯 – gbk

1

嘗試一下本作的組合鍵Ctrl + ñ

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.N) 
    { 
     MessageBox.Show("e"); 
    } 
+0

這是好的,但我也改變了事件 - 請參閱編輯,謝謝 – gbk

+0

@Kirill偉大! – Kurubaran

相關問題