在Winforms中,我有一个文本框,其中AutoCompleteMode设置为SuggestAppend,AutoCompleteCustomSource设置为。当用户键入一些字母时,会显示建议列表。如果用鼠标单击此列表中的某个项目,则会为ENTER键引发包含文本框的窗体的KeyDown事件。
用鼠标选择建议项目时,是否有可能不引发此事件?
自动完成功能有几个怪癖,这些怪癖是从其最初设计的用途,即Internet Explorer的地址框继承而来的。这包括在单击列表中的项目时发出Enter键。在IE的地址框中按Enter键可导航到输入的URL。
对此您无能为力,本机接口(IAutoComplete2)几乎没有配置其工作方式的选项。它通过伪造Windows消息将按键插入文本框。这是区别的一种方法,实际的钥匙不会掉下来。你可以通过点击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);
您可以捕获keydown键:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//Do nothing or something
}
}