2015-08-10 6 views
1

Таким образом, у меня есть checklistbox, содержащий строковые значения, как:Сравнение предметов checklistbox в массиве

  • ASDF-432-Qwer-vcxz
  • реук-123-Qwer-vcxz
  • Рети-323- qw65-vcyt
  • kjhf-232-ouyy-bjkl
  • ...

И у меня есть массив (onlineVaults), что с ontains некоторые из тех же значений, что в checklistbox как:

  • Рети-323-qw65-vcyt
  • ASDF-432-Qwer-vcxz

Теперь я хочу проверить только те значения в checklistbox которые находятся в массиве. Другие должны быть отключены.

for (int i = 0; i < checklistbox.Items.Count; i++) 
{ 
    if (onlineVaults.Contains(checklistbox.Items[i])) 
    { 
     checklistbox.SetItemChecked(i, true); 
    } 
} 

Я попытался это выяснить, но это не сработает. Он проверяет только одно значение и ничего больше. Что я должен делать?

+0

Можете ли вы представить конкретный пример (вы пробовали это с самыми значениями, приведенными в вопросе)? Какой элемент остается в конце? –

+0

Каково значение по умолчанию для каждого флажка? вы пытались добавить блок 'else' в ваш оператор if, который устанавливает флажки в значение unchecked? –

+0

Значение по умолчанию для каждого флажка не установлено. Я попытался добавить инструкцию 'else', но это не сработало @ReeceKenney – niklang

ответ

0

Попробуйте

var checklistbox = new List<string> 
{ 
    "asdf-432-qwer-vcxz", 
    "rewq-123-qwer-vcxz", 
    "rety-323-qw65-vcyt", 
    "kjhf-232-ouyy-bjkl" 
}; 
var onlineVaults = new List<string> 
{ 
    "rety-323-qw65-vcyt", 
    "asdf-432-qwer-vcxz" 
}; 

for (int i = 0; i < checklistbox.Items.Count; i++) 
{ 
    checklistbox.SetItemChecked(i, onlineVaults.Contains(checklistbox.Items[i]));    
} 

EDIT:

игнорировать регистр и обрезать значения, попробуйте это

for (int i = 0; i < checklistbox.Items.Count; i++) 
{ 
    checklistbox.SetItemChecked(i, IsValueExist(onlineVaults, checklistbox.Items[i]));    
} 

private bool IsValueExist(List<string> list, string value) 
{ 
    return list.Any(x => string.Compare(x.Trim(), value.Trim(), StringComparison.InvariantCultureIgnoreCase) == 0);   
} 
+0

Не работает, делает то же самое, что и мой код 'if else'. – niklang

+0

@ M.NasserJavaid: Разве это [этот метод] (https://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.setitemchecked% 28v = vs.110% 29.aspx)? –

+0

@niklang Вы можете видеть значения, используя debug, нужно ли обрезать значения? –