Я создаю комбинированный список программно следующим образом:
var cbo = new ComboBox {
DataSource = mylist,
SelectedIndex = mylist.IndexOf(myvalue)
};
Я не устанавливаю ValueMember
так, чтобы значением был сам объект. Когда я делаю выше, я получаю следующее исключение в строке SelectionIndex
:
InvalidArgument = значение "3" недопустимо для "SelectedIndex". Имя параметра: SelectedIndex
Это потому, что выпадающий все еще создается, и поэтому DataSource
еще не заселены? Если да, то как правильно установить индекс?
Регистрация данных не будет работать, пока элемент управления не станет видимым. Поэтому вам нужно изменить код на:
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
будет заполнен элементами источника данных, и его выбранный индекс будет установлен в соответствии с ожиданиями.
HandleCreated
. В качестве альтернативы вы также можете положиться наVisibleChanged
без использованияBeginInvoke
.