5

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

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

4

2 回答 2

7

自动完成功能有几个怪癖,这些怪癖是从其最初的设计用途继承而来的,即 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);
于 2012-08-21T14:16:21.737 回答
1

您可以捕获 keydown 键:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
    //Do nothing or something
    }
}
于 2012-08-21T13:29:55.597 回答