从AutoComplete建议列表中选择项目会使用ENTER键引发KeyDown事件

时间:2012-08-21 13:25:55

标签: c# autocomplete textbox onkeydown

在Winforms中,我有一个文本框,其中AutoCompleteMode设置为SuggestAppend,并设置了AutoCompleteCustomSource。当用户键入一些字母时,显示建议列表。如果通过鼠标单击选择此列表中的项目,则会为ENTER键引发包含文本框的表单的KeyDown事件。

使用鼠标选择建议项目时是否有可能不引发此事件?

2 个答案:

答案 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
    }
}