在Winforms中,我有一个文本框,其中AutoCompleteMode设置为SuggestAppend,并设置了AutoCompleteCustomSource。当用户键入一些字母时,显示建议列表。如果通过鼠标单击选择此列表中的项目,则会为ENTER键引发包含文本框的表单的KeyDown事件。
使用鼠标选择建议项目时是否有可能不引发此事件?
答案 0 :(得分:6)
自动完成功能有一些从其原始设计用途(Internet Explorer的地址框)继承的怪癖。这包括单击列表中的项目时发出Enter键。在IE的地址栏中按Enter键可以导航到输入的URL。
您无法做任何事情,原生界面(IAutoComplete2)几乎没有选项来配置它的工作方式。它通过伪造Windows消息将键击戳到文本框中。哪种方式可以区分,实际的密钥不会下降。你可以通过pinkeoking GetKeyState()检查一下,像这样:
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.Enter && GetKeyState(Keys.Enter) < 0) {
Console.WriteLine("Really down");
}
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern short GetKeyState(Keys key);
答案 1 :(得分:1)
你可以抓住keydown键:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//Do nothing or something
}
}