Winforms 如何知道文本框上的自动完成列表框是否打开?
我有一张有两个文本框的表格。第一个有一个customsource的自动完成集,如下所示:Winforms 如何知道文本框上的自动完成列表框是否打开?,winforms,autocomplete,Winforms,Autocomplete,我有一张有两个文本框的表格。第一个有一个customsource的自动完成集,如下所示: textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; textBox1.AutoCompleteCustomSource = GetUserNames(); GetUserNames()方法重新启动一个AutoCom
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteCustomSource = GetUserNames();
GetUserNames()方法重新启动一个AutoCompleteCustomSource,所有这些都非常有效
当此表单在第一个文本框中打开焦点时,用户可以输入或从自动完成中选择,效果很好
两个文本框都有一个onKeyDown事件,在该事件中,它们应该使用两个文本框的值进行一些验证
我只想在自动完成列表框关闭时按ENTER键进行验证
这样看:用户开始键入,出现一个列表,用户从列表中选择一个项目并按enter确认其选择,然后他想按TAB转到下一个文本框。
但是,当他在自动完成列表中选择一项后按ENTER键时,按键事件已经触发。在此阶段,不应触发keydown事件,ENTER只应确认自动完成列表中的选择 是否有方法在按下键时检测是否在自动完成列表仍然打开时按下了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。