C# WinForms:我使用了具有以下属性的组合框: DropDownStyle:DropDown AutoCompleteSource:ListItems AutoCompleteMode:SuggestAppend
所以现在当我输入组合框时,它会从它的 items.Good 列表中建议项目。但问题是我不想输入我想要的任何内容,我只想能够从其列表中的有效项目中输入。我该如何修复这部分?
谢谢。
您必须使用您的值(手动或通过数据绑定)填充Items列表,然后将DropDownStyle设置为DropDownList
.
组合框看起来不像文本框,但是当它有焦点时,输入它会自动从项目列表中选择最佳匹配。
(这是将组合框设置为不允许自定义文本的推荐方法。)
或者,如果您希望样式为 DropDown,请捕获KeyPress
控件的事件,并快速检查控件的文本 plus e.KeyChar
,如果在列表中找不到,请设置e.Handled = True
。这将阻止所有会导致不在列表中的单词的按键。
它与自动完成不完全一样,但如果将 DropDownStyle 设置为 DropDownList,它将只允许 Items 集合中的条目。但是,此模式的默认行为是您键入的每个字母都会跳转到以该字母开头的第一个匹配项。因此,如果您想让他们在第一个字母之后继续输入其他字符,您可以将 AutoCompleteSource 设置为 ListItems ,然后将 AutoCompleteMode 设置为 Append 。
这与组合框中的字符串匹配。
int index = combobox1.FindString(combobox1.Text);
if (index < 0)
{
MessageBox.Show("Invalid Record");
combobox1.Focus();
return;
}
其他选项可能是注册到TextChanged
orTextUpdated
事件,如果已经输入的文本不符合您的条件,请适当地更改它。
组合框控件不直接支持这一点。
您需要编写处理程序来验证列表中的项目是否已输入,如果没有则提示用户。
您可以尝试在离开或清除选择时设置默认值。
private void comboBox1_Leave(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex == -1)
{
if (comboBox1.Items.Count > 0)
{
comboBox1.SelectedIndex = 0;
}
else
{
comboBox1.Text = "";
}
}
}