拥有一个不允许自定义文本的自动完成组合框

时间:2012-05-17 14:23:45

标签: c# winforms

C#WinForms: 我使用了具有以下属性的Combobox: DropDownStyle:DropDown AutoCompleteSource:ListItems AutoCompleteMode:SuggestAppend

所以现在当我输入组合框时,它会从项目列表中建议项目。很好。但问题是我不希望能够输入我想要的任何内容,我只是希望能够从列表中的有效项进行输入。我该如何解决这个问题呢?

感谢。

6 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

组合框控件不直接支持此功能。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

其他选项可能是注册TextChangedTextUpdated事件,如果已输入的文字不符合您的条件,请更正。

答案 5 :(得分:0)

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

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