我在ComboBox
内使用了枚举。我希望它允许编辑,以便用户可以在其中键入内容。我将枚举转换为string[] arrayItems
,而listItems
是枚举列表的长度。
现在我想检查用户文本输入:如果未列出,则应显示该项未列在其中的消息。
但对于我的代码(如下),它多次显示错误:
// Converted enum to string[] before
for (int i = 0; i < listItems; i++)
{
if (comboBox1.Text != arrayItems[i])
{
message = string.Format("Sorry! " + comboBox1.Text + " not found.");
}
}
每次启动时都显示错误,因为它遍历列表中的每个元素。我希望如果这可以检查整个枚举列表并在输入错误时给出错误。
答案 0 :(得分:2)
您可以将循环更改为
bool ok = false;
for (int i = 0; i < listItems; i++)
{
if (comboBox1.Text == arrayItems[i])
{
ok=true;
break;
}
}
if(ok==false)
{
message = string.Format("Sorry! " + comboBox1.Text + " not found.");
}
答案 1 :(得分:1)
if(arrayItrmd.Contains(combobox1.Text))
{
//logic if trur
}
答案 2 :(得分:0)
您可以使用LINQ的All
。顾名思义,只有当所有元素都与您的查询相对应时才会出现这种情况。它基本上相当于!Any
if (arrayItrmd.All(item => item != comboBox1.Text))
{
message = string.Format("Sorry! " + comboBox1.Text + " not found.");
}
这意味着“如果arrayItrmd中的每个元素都不等于comboBox1的文本,请分配消息。”
答案 3 :(得分:0)
您可以忽略循环的使用
if(tmpImageArray.FirstOrDefault(a => a == comboBox1.Text) == default(String))
{
message = comboBox1.Text + " not found";
}
else{
message = comboBox1.Text + " found";
}
答案 4 :(得分:0)
我已经解决了这个问题,
首先我的枚举,我将绑定到我的组合框
public enum comboboxVals
{
one, two, three
}
然后像我这样设置我的组合框的数据源
comboBox1.DataSource = Enum.GetNames(typeof(comboboxVals));
然后在我的一个组合框事件中实现代码,以检查值是否有效,如组合框离开,验证和验证事件..
private void comboBox1_Validating(object sender, CancelEventArgs e)
{
var cbx = sender as ComboBox;
if (!Enum.IsDefined(typeof(comboboxVals), cbx.Text))
{
MessageBox.Show(cbx.Text + " not in the list");
e.Cancel=true;
}
else
{
// Implement your logic here
}
}