Re[3]: List<MyClass> в ComboBox: SelectedIndex всегда -1, по
От: samius Япония http://sams-tricks.blogspot.com
Дата: 01.06.09 13:32
Оценка:
Здравствуйте, J-Pro, Вы писали:

JP>Здравствуйте, samius, Вы писали:


S>>Здравствуйте, J-Pro, Вы писали:


JP>>>В этот момент вызывается хэндлер cBox_SelectedIndexChanged, НО при этом cBox.SelectedIndex равен -1. При том, что список элементов приходит нормальный(3 элемента, нормально инициализированных).


S>>Значение SelectedIndex, равное -1, означает что ни один элемент не выделен. Учтите это в своих классах.


JP>Почему тогда:


JP>1. Если cBox.DataSource'у присвоить список String'ов, то сразу выделяется первый элемент и в хэндлере при этом cBox.SelectedIndex НЕ равен -1?

Не сразу. Вообще-то SelectedIndex при смене выделения меняется дважды. Первый раз на -1, второй раз на индекс выделенного элемента.

JP>2. Если в методе cBox_SelectedIndexChanged написать:

JP>
JP>cBox.SelectedIndex = 1;
JP>

JP>, то он уходит в бесконечную рекурсию, в которой cBox.SelectedIndex никогда не равен 1? Как же тогда из кода выделить элемент?
Все верно. Присваивание SelectedIndex-а порождает череду (не одно) событий SelectedIndexChanged. Если вы присваиваете новое значение внутри обработчика, то кроме рекурсии ничего хорошего не получите.
Из кода выделить элемент можно, но делать это надо не в обработчике SelectedIndexChanged! Можно и в нем, но очень аккуратно, с проверкой текущего индекса, чтобы не уйти в рекурсию.

JP>Что-то тут не так.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.