2011-01-21 72 views
3

我有AutoCompleteMode = suggest組合框和處理KeyPress事件,像這樣:自動完成組合框onkeypress事件事件吃掉回車鍵

private void searchBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Return) 
    { 
     // do stuff 
    } 
} 

但是,它並沒有趕上Enter關鍵。由於自動完成下拉菜單完美無缺,它捕捉了所有其他內容。

我也試過建議這裏提供:http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/2db0b540-756a-4a4f-9371-adbb92409806,表單的KeyPreview屬性設置爲true,把一個斷點在窗體的按鍵事件處理函數:

private void Form_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = false; 
} 

然而,即使是表單的處理程序沒有被捉住進入鍵!

有什麼建議嗎?

(如果我禁用自動完成,它捕獲回車鍵)

回答

4

Difference between KeyDown and KeyPress

在你的情況,你可以做的最好的是使用KeyDown事件。

void SearchBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if(e.KeyCode == Keys.Enter) 
    { 
     // Do stuff 
    } 
} 

KeyPress事件的另一個有趣的事情是:它甚至捕獲輸入密鑰與autocompete如果組合框沒有項目! :-)

+0

就是這樣!感謝一堆:) –

+0

這個解決方案也適用於Delphi和'OnKeyPress'和'OnKeyDown'事件。 –