所以有很多与我类似的问题,但没有一个是我真正需要的。我有一个包含城市列表的组合框。我打开了自动完成功能,这正是我想要的,同时也打开了建议附加功能。但是,问题是,如果用户试图跳出组合框,它实际上并没有选择该项目。这是一个例子:我正在搜索“奥兰多”。如果我输入“orla”,建议填写单词的其余部分(选定),因此显示“orlando”。这就是我要选择的项目。如果我按回车键然后制表符,它将选择该项目然后制表符。不过,我需要的是选择与单词匹配的基础项目。如果我需要解释更多,我可以。提前致谢!
卢克
所以有很多与我类似的问题,但没有一个是我真正需要的。我有一个包含城市列表的组合框。我打开了自动完成功能,这正是我想要的,同时也打开了建议附加功能。但是,问题是,如果用户试图跳出组合框,它实际上并没有选择该项目。这是一个例子:我正在搜索“奥兰多”。如果我输入“orla”,建议填写单词的其余部分(选定),因此显示“orlando”。这就是我要选择的项目。如果我按回车键然后制表符,它将选择该项目然后制表符。不过,我需要的是选择与单词匹配的基础项目。如果我需要解释更多,我可以。提前致谢!
卢克
您使用的是哪个版本的 .NET?我在 3.5 中尝试过,行为与您描述的相反。当我输入部分名称并跳出时,它会选择列表中的项目。如果我按 Enter,它不会选择该项目,它实际上会清除我刚刚输入的值。
您的属性是如何在 ComboBox 上设置的?我有 AutoCompleteMode = SuggestAppend 和 AutoCompleteSource = ListItems。
我得到与 OP 相同的行为,并且标记的答案(来自无法重现问题的 Albert)不是解决方案。此问题也已作为错误报告给 Connect:
我没有费心创建一个自定义组合框控件,如 Connect Bug 的解决方法部分中指定的那样。相反,我只是将下拉列表设置为默认值:
cboAccount.SelectedValue = _accountList(0).Key; //<--Here I set a default value
cboAccount.DroppedDown = true;
WM_KILLFOCUS
该值在消息中丢失。WndProc
在子类中覆盖ComboBox
为我解决了这个问题。不幸的是,我手头只有 VB.NET 代码:
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = &H8 Then 'WM_KILLFOCUS
Dim sText As String = Me.Text
MyBase.WndProc(m)
Me.Text = sText
Exit Sub
End If
MyBase.WndProc(m)
End Sub