【问题标题】:Combobox Autocomplete Tab-out does not select item组合框自动完成选项卡不选择项目
【发布时间】:2017-04-06 17:02:30
【问题描述】:

所以有很多与我类似的问题,但没有一个是我真正需要的。 我有一个包含城市列表的组合框。我打开了自动完成功能,这正是我想要的,同时也打开了建议附加功能。但是,问题是,如果用户试图跳出组合框,它实际上并没有选择该项目。这是一个例子: 我正在寻找“奥兰多”。如果我输入“orla”,建议填写单词的其余部分(选定),因此显示“orlando”。这就是我要选择的项目。如果我按回车键然后制表符,它将选择该项目然后制表符。不过,我需要的是选择与单词匹配的基础项目。 如果我需要解释更多,我可以。 提前致谢!

卢克

【问题讨论】:

标签: c# combobox autocomplete tabbing


【解决方案1】:

您使用的是哪个版本的 .NET?我在 3.5 中尝试过,行为与您描述的相反。当我输入部分名称并跳出时,它会选择列表中的项目。如果我按回车,它不会选择项目,它实际上会清除我刚刚输入的值。

如何在 ComboBox 上设置属性?我有 AutoCompleteMode = SuggestAppend 和 AutoCompleteSource = ListItems。

【讨论】:

  • 在 2.0 中的行为相同(跳出确实选择)
  • 我使用的是 3.5 sp1。对我来说,当我标记出来时,它会填充文本的其余部分(但不将第一个字母大写),并且不选择绑定项目。我在组合框的 onLeave 上有一个事件处理程序,因此在点击选项卡后会触发它。当它被触发时,comboBox.SelectedItem == null。我在那里有这个事件处理程序,因为我需要确保他们在没有选择城市的情况下不会离开框,因为他们不允许添加新的。
  • 好吧,在某种程度上我们都是对的。在触发 onLeave 事件时,尚未选择该项目。但是,一旦它离开,它就会选择该项目。所以我的新问题是,你知道我可以限制在没有选择项目的情况下离开组合框的方法吗?我不能使用 onLeave,因为它还没有被选中。
【解决方案2】:

我得到与 OP 相同的行为,并且标记的答案(来自无法重现问题的 Albert)不是解决方案。此问题也已作为错误报告给 Connect:

https://connect.microsoft.com/VisualStudio/feedback/details/711945/tab-on-a-winforms-combobox-with-properties-dropdownstyle-dropdownlist-autocompletemode-append-autocompletesource-listitems-doesnt-work-correctly

我没有按照 Connect Bug 的解决方法部分中的说明创建自定义组合框控件。相反,我只是将下拉列表设置为默认值:

cboAccount.SelectedValue = _accountList(0).Key;   //<--Here I set a default value
cboAccount.DroppedDown = true;

【讨论】:

【解决方案3】:

值在WM_KILLFOCUS 消息中丢失。在ComboBox 的子类中覆盖WndProc 为我解决了这个问题。不幸的是,我手头只有 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多