2014-01-30 3 views
0

Я использую Enum в пределах ComboBox. Я хочу, чтобы он разрешил редактирование, чтобы пользователь мог вводить в него что-то. Я преобразовал 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."); 
    } 
} 

Это показывает ошибку каждый раз, когда я начинаю его, как он перебирает каждый и каждый элемент в списке. Я хочу, чтобы это могло проверить весь список Enum и дать ошибку один раз в случае неправильного ввода.

ответ

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

Я клянусь, что я не видел код, прежде чем отправлять мой пример с тем же имя для логической переменной :) –

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)); 

, а затем реализован код в одном из моих COMBOBOX событий, чтобы проверить, если значение действует как поле со списком отпуска, Проверка и события Validated ..

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 
      } 


     } 
Смежные вопросы