Winforms 如何知道文本框上的自动完成列表框是否打开?

Winforms 如何知道文本框上的自动完成列表框是否打开?,winforms,autocomplete,Winforms,Autocomplete,我有一张有两个文本框的表格。第一个有一个customsource的自动完成集,如下所示: textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; textBox1.AutoCompleteCustomSource = GetUserNames(); GetUserNames()方法重新启动一个AutoCom

我有一张有两个文本框的表格。第一个有一个customsource的自动完成集,如下所示:

textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteCustomSource = GetUserNames();
GetUserNames()方法重新启动一个AutoCompleteCustomSource,所有这些都非常有效

当此表单在第一个文本框中打开焦点时,用户可以输入或从自动完成中选择,效果很好

两个文本框都有一个onKeyDown事件,在该事件中,它们应该使用两个文本框的值进行一些验证

我只想在自动完成列表框关闭时按ENTER键进行验证

这样看:
用户开始键入,出现一个列表,用户从列表中选择一个项目并按enter确认其选择,然后他想按TAB转到下一个文本框。
但是,当他在自动完成列表中选择一项后按ENTER键时,按键事件已经触发。在此阶段,不应触发keydown事件,ENTER只应确认自动完成列表中的选择

是否有方法在按下键时检测是否在自动完成列表仍然打开时按下了ENTER键? 或者,在自动完成列表打开时,是否有方法禁用keydown事件

编辑:
从评论中我尝试了这个链接的答案 不幸的是,它在这种情况下不起作用,但它告诉我,按下自动完成建议上的enter键可以做两件事:

  • 关闭自动完成窗口
  • 触发文本框的keydown事件
  • 因此,我需要找到一种方法来停止按键事件,以便在按下自动完成窗口上的enter键时触发文本框

    编辑:
    事情远比我想象的糟糕。
    当您打开“自动建议”框,然后单击建议的项目以选择它时,keydown事件也会触发,并且它有键。输入其键码!从什么时候开始,点击就等于击键了?

    我该怎么阻止这一切?这是一个错误吗?

    是使用VB.NET实现的解决方案:@RezaAghaei我正在尝试将答案转换为C#但我被新的EnumThreadDelegate(AddressOf Me.EnumThreadCallback),IntPtr.Zero卡住了。AddresOf的c#方法是什么?我在这里找到了很多关于它的文章,但是它们不起作用,或者我不知道如何在这种情况下使用它们。我最终将它转换为c,但是IsWindowVisible()总是返回false。你知道这是什么原因吗?调试EnumThreadCallBack时,正确的类名为there@RezaAghaei感谢您的回答,但这对我没有帮助,似乎当按下自动建议下拉菜单上的enter键时,下拉菜单首先关闭,然后文本框的向下键启动。然后IsWindowVisisble将返回false。