Ваш вопрос не совсем ясен, но я все еще пытаюсь помочь вам. Как уже упоминалось в комментариях, в вашем коде есть несколько небольших проблем:
1. Outter for -l oop
for (int i = 1; i < panel1kilist.Count; i++)
Вы определяете i = 1, что означает, что вы пропускаете самый первый элемент в свой panel1kilist, потому что списки и массивы начинаются с индекса 0
2. Использование переменных bool
if (panel1kilist[i].SelectedItem.ToString() == panel1kilist[j].SelectedItem.ToString())
{
if (check == false)
{
MessageBox.Show("match found");
}
check = true;
}
else
{
if (check1 == false)
{
MessageBox.Show("no match found");
}
check1 = true;
}
Вы определяете переменные bool перед запуском циклов for. Таким образом, всякий раз, когда вы устанавливаете переменные check и check1 в true, условия if check == false и check1 == false никогда больше не вернут true. Таким образом, вы никогда не получите никаких сообщений, кроме самых первых «Соответствие найдено» и «Соответствие не найдено».
3. Мое предлагаемое решение
Используйте foreach-l oop и прерывайте циклы, как только вы нашли совпадение, после того, как циклы просто показывают сообщение. Код:
var matchFound = false;
foreach (var combobox in panel1kilist)
{
foreach (var comboboxToMatch in panel1kilist.Skip(1))
{
if (combobox.SelectedItem.ToString() == comboboxToMatch.SelectedItem.ToString())
{
matchFound = true;
// Stops the inner loop in case of a match
break;
}
}
// Stops the outer loop in case of a match
if(matchFound)
{
break;
}
}
if(matchFound)
{
MessageBox.Show("match found");
}