具有不允许自定义文本的自动完成组合框
本文关键字:组合 不允许 自定义 文本 | 更新日期: 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;
}
组合框控件不直接支持此功能。
您需要编写处理程序来验证是否已输入列表中的项,如果没有,则提示用户。
其他选项可能是注册到 TextChanged
或 TextUpdated
事件,如果已经键入的文本不符合您的条件,请适当更改它。
您可以尝试在离开或清除选择时设置默认值。
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"已锁定"设置为"假"