【问题标题】:Combobox and autocomplete in C#C# 中的组合框和自动完成
【发布时间】:2011-09-08 18:33:44
【问题描述】:

我对组合框中的自动完成选项有小问题。一切正常,除了我想用不同的方式工作:)

当我开始输入组合框时,autusuggest 以我喜欢的方式工作:

但是当我第一次打开组合框,然后开始输入时,我会得到类似的东西:

此外,我无法从自动建议组合框中选择项目,只能从下面的列表中选择。

AutocompleteMode 是 SuggestAppend

我想在第一张图片上自动提示,在像图 2 这样的情况下,第一个组合框列表应该以某种方式关闭..

【问题讨论】:

    标签: c# winforms autocomplete combobox


    【解决方案1】:

    我遇到了同样的问题,用这种方法解决了:

    private void comboBox_DropDown(object sender, EventArgs e)
    {
        ComboBox cbo = (ComboBox)sender;
        cbo.PreviewKeyDown += new PreviewKeyDownEventHandler(comboBox_PreviewKeyDown);
    }
    
    private void comboBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        ComboBox cbo = (ComboBox)sender;
        cbo.PreviewKeyDown -= comboBox_PreviewKeyDown;
        if (cbo.DroppedDown) cbo.Focus();
    }
    

    一旦用户单击DropDown 按钮PreviewKeyDown 事件将附加到ComboBox。当用户开始输入时,会触发新添加的事件。在这种情况下,我们检查ComboBox 是否为DroppedDown,如果是,则关注ComboBox。在ComboBox 上,焦点DropDown 消失,仅此而已。

    【讨论】:

      【解决方案2】:

      如何使用DropDownDropDownClosed 事件来禁用或更改自动完成模式?

      【讨论】:

      • 是的,这对我有用。以下是一些您可以使用的代码:m_cmbNode.DropDown += (sender, e) => m_cmbNode.AutoCompleteMode = AutoCompleteMode.None; m_cmbNode.DropDownClosed += (sender, e) => m_cmbNode.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
      【解决方案3】:

      我遇到了完全相同的问题。 我尝试了 DropDown 和 DropDownClosed 事件将 AutoCompleteMode 属性设置为 none 并提出建议。 在这种情况下,使用鼠标选择项目后不会触发 SelectedIndexChanged 事件。 我在 SelectedIndexChanged 事件中使用了 SelectedValue 属性,并且在触发 DropDownClosed 事件时该属性已经更改。 就我而言,我只是从 DropDownClosed 事件中调用 SelectedIndexChanged 方法来解决问题。

      【讨论】:

        【解决方案4】:

        在 ComboBox KeyDown 上实现事件。它应该是这样的。

        void cmbExample_KeyDown(object sender, KeyEventArgs e)
            {
                if ((sender as ComboBox).DroppedDown)
                    (sender as ComboBox).DroppedDown = false;
            }
        

        【讨论】:

          【解决方案5】:

          您是否尝试过AutoCompleteMode 的其他可能值,即AppendNoneSuggest?我认为您正在寻找的是Suggest 而不是AppendSuggest

          这里有一些downloadable sample code 说明了不同的模式,如果你需要的话。

          【讨论】:

          • 我试过了。追加是显示其余的值,并建议是这个新的组合框窗口。我想要这个带有建议模式的新组合框。但是第一个列表应该被关闭..
          【解决方案6】:

          我还发现默认的 UI 实现让人分心,因为两个下拉菜单争夺鼠标控制权。

          您希望在显示自动完成建议时隐藏下拉列表。在显示自动完成建议之前,组合框会发出一条 Windows 消息。我选择折叠下拉列表以响应此消息。它需要一个小的覆盖组合框来实现这一点:

          Public Class Combobox2
              Inherits ComboBox
          
              Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
                  If m.Msg = 135 AndAlso DroppedDown Then 'WM_GETDLGCODE
                      DroppedDown = False
                  End If
                  MyBase.WndProc(m)
              End Sub
          
          End Class
          

          【讨论】:

            【解决方案7】:
            void cmbExample_KeyDown(object sender, KeyEventArgs e)
            {
              cmbExample.DroppedDown = false;
            }
            

            【讨论】:

              猜你喜欢
              • 2011-07-31
              • 2021-12-07
              • 2011-08-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-07-05
              • 2011-10-10
              相关资源
              最近更新 更多