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

本文关键字:组合 不允许 自定义 文本 | 更新日期: 2023-09-27 18:34:24

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

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

谢谢。

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

您必须

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

组合框看起来不像文本框,但当它具有焦点时,键入它将自动从"项目"列表中选择最佳匹配项。

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

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

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

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

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

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

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

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

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

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

DropDownStyle 有 3 个选项简单下拉菜单下拉列表选择下拉列表"允许丢弃"设置为 True"已锁定"设置为"假"