Combobox SelectedIndex не устанавливается при использовании списка IndexOf

2

Я создаю комбинированный список программно следующим образом:

var cbo = new ComboBox {
    DataSource = mylist,
    SelectedIndex = mylist.IndexOf(myvalue)
};

Я не устанавливаю ValueMember так, чтобы значением был сам объект. Когда я делаю выше, я получаю следующее исключение в строке SelectionIndex:

InvalidArgument = значение "3" недопустимо для "SelectedIndex". Имя параметра: SelectedIndex

Это потому, что выпадающий все еще создается, и поэтому DataSource еще не заселены? Если да, то как правильно установить индекс?

Теги:
winforms
data-binding
combobox

1 ответ

1
Лучший ответ

Регистрация данных не будет работать, пока элемент управления не станет видимым. Поэтому вам нужно изменить код на:

var mylist = Enumerable.Range(1, 5).ToList();
var myvalue = 2;
var cbo = new ComboBox();
cbo.HandleCreated += (obj, args) =>
{
    BeginInvoke(new Action(() =>
    {
        cbo.DataSource = mylist;
        cbo.SelectedIndex = mylist.IndexOf(myvalue);
    }));
};
this.Controls.Add(cbo);

Затем, как только элемент управления станет видимым, будет запущен код инициализации, и ComboBox будет заполнен элементами источника данных, и его выбранный индекс будет установлен в соответствии с ожиданиями.

  • 0
    По этим причинам я изменил способ использования события HandleCreated . В качестве альтернативы вы также можете положиться на VisibleChanged без использования BeginInvoke .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню