Здравствуйте, 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>Что-то тут не так.