2011-01-21 40 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'事件。 –