【问题标题】:Having a AutoComplete combobox that does NOT allow custom text有一个不允许自定义文本的自动完成组合框
【发布时间】:2012-05-17 14:23:45
【问题描述】:

C# WinForms: 我使用了具有以下属性的组合框: 下拉样式:下拉 自动完成来源:ListItems 自动完成模式:建议追加

所以现在当我输入组合框时,它会从其项目列表中建议项目。很好。但问题是我不想输入我想要的任何内容,我只想能够从其列表中的有效项目中输入。我该如何修复这部分?

谢谢。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    它与自动完成不完全一样,但如果您将 DropDownStyle 设置为 DropDownList,它将只允许 Items 集合中的条目。但是,此模式的默认行为是您键入的每个字母都会跳转到以该字母开头的第一个匹配项。因此,如果您想让他们在第一个字母之后继续输入其他字符,您可以将 AutoCompleteSource 设置为 ListItems ,然后将 AutoCompleteMode 设置为 Append 。

    【讨论】:

      【解决方案2】:

      您必须使用您的值(手动或通过数据绑定)填充 Items 列表,然后将 DropDownStyle 设置为 DropDownList

      组合框看起来不像文本框,但是当它获得焦点时,在其中输入会自动从项目列表中选择最佳匹配。

      (这是将组合框设置为不允许自定义文本的推荐方法。)

      或者,如果您希望样式为 DropDown,则捕获控件的 KeyPress 事件,并快速检查控件的文本加上 e.KeyChar,如果在列表中找不到,请设置e.Handled = True。这将阻止所有会导致单词不在列表中的按键。

      【讨论】:

      • 谢谢,但这不起作用。是的,它会阻止它输入我们喜欢的任何内容,但它也会破坏 AutoCompletion。我们仍然可以输入,但总是会显示整个列表并且不会过滤它们。
      【解决方案3】:

      这与组合框中的字符串匹配。

      int index = combobox1.FindString(combobox1.Text);
        if (index < 0)
        {
        MessageBox.Show("Invalid Record");
        combobox1.Focus();
        return;
        }
      

      【讨论】:

        【解决方案4】:

        组合框控件不直接支持。

        您需要编写处理程序来验证列表中的项目是否已输入,如果没有则提示用户。

        【讨论】:

          【解决方案5】:

          其他选项可能是注册到TextChangedTextUpdated事件,如果已经输入的文本不符合您的条件,请适当更改。

          【讨论】:

            【解决方案6】:

            您可以尝试在离开或清除选择时设置默认值。

            private void comboBox1_Leave(object sender, EventArgs e)
            {
                   if (comboBox1.SelectedIndex == -1)
                   {
                        if (comboBox1.Items.Count > 0)
                        {
                            comboBox1.SelectedIndex = 0;
                        }
                        else
                        {
                            comboBox1.Text = "";
                        }
                    }
            }
            

            【讨论】:

              猜你喜欢
              • 2017-09-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-22
              • 1970-01-01
              • 1970-01-01
              • 2011-07-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多