2016-10-01 5 views
1

Я пишу приложение WinForms для школы, в котором пользователю показан флаг и он должен выбрать соответствующую страну из comboBox. Я использую список типа флага в качестве DataSource для COMBOBOX ...WinForms Combobox not Removing Item

List<Flag> flags; 
comboBox.DataSource = flags; 

После поворота, я снимая предыдущий флаг из списка и обновление COMBOBOX DataSource ...

flags.Remove(currentFlag); 
comboBox.DataSource = flags; 

Я обнаружил, что флаг удаляется из списка, но не из comboBox. Где я иду не так?

ответ

0

Root проблема здесь состоит в том, что ComboBox не получает каких-либо уведомлений, когда его DataSource изменения, так что, очевидно, он не обновит визуально, как это нужно, потому что это Безразлично Я не понимаю, что произошло.

Решение, отличное от идеала, является тем, что Sajeetharan предложил удалить список althogether и добавить его снова. Это заставляет элемент управления перечитать весь список еще раз, и поэтому он «ловит» изменение, удаляя отсутствующий элемент.

Лучшим решением является использование соответствующего типа коллекции, который предоставляет уведомления об изменении элемента управления и позволяет его перерисовывать по мере необходимости. Это цель BindingList<T> class. Часто рекомендуется использовать это при настройке источников данных для привязок вместо простых списков.

Короче говоря, ваш код станет:

BindingList<Flag> flags = new BindingList<Flag>(); 
comboBox.DataSource = flags; 

После этого, вы просто удалить элемент из него:

flags.Remove(currentFlag); 

и связывание данных двигателя заботится о удалении элемента из комбо.

+0

Это похоже на отличное решение. Я собираюсь попробовать этот подход. Спасибо! – dag623

+0

Работал как шарм! Еще раз спасибо! – dag623

2

ли это так,

flags.Remove(currentFlag); 
comboBox.DataSource = null; 
comboBox.DataSource = flags; 
+0

Благодарим за помощь! Я сделал так, как вы предлагали, но элементы на дисплее отображались неправильно. Все мои предметы показывались как FlagQuiz.Flag. Я попытался установить источник привязки еще до установки DataSource и, похоже, сейчас работает. В очередной раз благодарим за помощь! – dag623

+0

@ dag623 Вы уверены, что предмет удаляется? показать нам, как вы получаете объект currentFlag – Sajeetharan

+0

Да, это было удалено в моем списке, так как это было моей первой догадкой. Я установил точку останова и проверил, что мой список обновляется. Спасибо за ваш вклад! – dag623