2014-01-30 56 views
0

我在ComboBox內使用Enum。我希望它允許編輯,以便用戶可以在其中輸入內容。我將Enum轉換爲string[] arrayItems,而listItems是Enum列表的長度。在循環中查找特定值

現在我想檢查用戶的文本輸入:如果它沒有列出,它應該顯示一條消息,該項目不在那裏列出。

但我的代碼(見下文)它顯示了我的錯誤多次:

// 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."); 
    } 
} 

這說明錯誤每次我啓動它,因爲它通過每列表中的每個元素迭代時間。我想,如果這可以檢查整個枚舉列表並給出錯誤一次的情況下輸入錯誤。

回答

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."); 
} 
+0

我發誓我張貼與同我的例子以前從來沒有見過你的代碼布爾變量的名稱:) –

1
if(arrayItrmd.Contains(combobox1.Text)) 
{ 
    //logic if trur 
} 
0

您可以使用LINQ的All這一點。顧名思義,只有當所有元素都與您的查詢相對應時纔會如此。它基本上的!Any

if (arrayItrmd.All(item => item != comboBox1.Text)) 
{ 
    message = string.Format("Sorry! " + comboBox1.Text + " not found."); 
} 

相當於這意味着「如果從arrayItrmd每個元素是不等於comboBox1的文本,分配消息」。

0

可以忽略使用循環

if(tmpImageArray.FirstOrDefault(a => a == comboBox1.Text) == default(String)) 
{ 
    message = comboBox1.Text + " not found"; 
} 
else{ 
    message = comboBox1.Text + " found"; 
} 
0

我已經解決了這個問題,像這樣的,

首先我的,我會結合我的組合框枚舉

然後設置我的combobox的數據源是這樣的

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 
      } 


     }