2014-02-10 4 views
2

Я пытаюсь удалить числовые элементы из ListBox, если эти значения существуют в другом ListBox. Мой код, похоже, не работает, и я не мог найти какую-либо помощь в Интернете. ListBox1 заполняется массивом, а ListBox2 заполняется из таблицы DataSet (fyi).Удалить элементы из ListBox, если элемент существует в другом ListBox

Также для справки: я не добавляю и элементы в список или выбираю ... просто просто хочу сравнить и удалить элементы ListBox2 из списка ListBox1, если они существуют все автоматически нажатием одной кнопки. Спасибо,

private void button1_Click(object sender, EventArgs e) 
{ 
    foreach (int item in listBox1.Items) 
    { 
     if (listBox2.Items.Contains(item)) 
     { 
      listBox1.Items.Remove(item); 
     } 
    } 
} 
+1

Я думаю, что это просто опечатка 'Еогеасп (интермедиат пункт в ListBox1.Items)' 'попробовать listBox2.Items'. – Yuriy

+0

только что поймал, что ... это был просто тип на форуме, но у моего кода действительно есть listbox2.items ... Я просто обновил код здесь. до сих пор не повезло. – goodfella

+0

попробуйте оценить ваш оператор 'if', чтобы явно проверить значение' true' – rommel

ответ

5

Ну вы только ссылки один список окно в коде - я подозреваю, что вы хотели бы:

частный недействительным button1_Click (объект отправителя, EventArgs е) {

foreach (int item in listBox1.Items) 
{ 
    if (listBox2.Items.Contains(item)) // notice change of reference 
    { 
     listBox1.Items.Remove(item); 
    } 
} 

Однако это может вызвать ошибку, так как вы изменяете ListBox, пока вы повторяете элементы. Один из способов безопасно удалить элементы его итерацию назад над выдержанным:

for (int i = listBox1.Items.Count - 1; i >= 0; i--) 
{ 
    int item = listBox1.Items[i]; 
    if (listBox2.Items.Contains(item)) // notice change of reference 
    { 
     listBox1.Items.RemoveAt(i); 
    } 
} 
+0

Я думаю, что существует опечатка в состоянии цикла 'i == 0', это должно быть' i! = 0' или 'i> = 0'. – Yuriy

+0

Оба вы правы. Я установил его в «i> = 0», и я также добавил «int item = Convert.ToInt32 (listBox1.Items [i]); и он отлично работает ... он просто пропускает 1-й элемент в списке. – goodfella

+0

@Yuriy thanks - исправлено. –

2

@D Stanley

Спасибо за вашу помощь и объяснение. @Yuriy - Спасибо за разъяснение, то

я> = 0

отлично работает. Я также преобразовал в listbox в int32. Ниже полностью рабочий код:

private void button1_Click(object sender, EventArgs e) 
    { 

     for (int i = listBox1.Items.Count - 1; i>= 0; i--) 
     { 
      int item = Convert.ToInt32(listBox1.Items[i]); 
      if (listBox2.Items.Contains(item)) 
      { 
       listBox1.Items.Remove(item); 
      } 
     } 

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