Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 100

Почему SelectedIndex в ComboBox меняется до закрытия списка?

08.01.2018, 17:44. Показов 2987. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Значение SelectedIndex в ComboBox меняется уже на этапе выбора элементов списка, когда список ещё открыт, а вот событие SelectedIndexChanged возникает только когда список закрывается после выбора элемента. Это очень неудобно, т.к. на этапе выбора SelectedIndex меняется, но программист об этом ничего не знает, пока список не закроется. Что посоветуете?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2018, 17:44
Ответы с готовыми решениями:

ComboBox.SelectedIndex
Здравствуйте, делаю изменение данных в бд, с помощью такого кода: MySqlConnection coon1 = new MySqlConnection(connStr); ...

ComboBox.SelectedIndex Binding to value-1
Добрый день! Возникла необходимость привязки данных, но чтобы от привязанного значения вычиталась единица. Сейчас привязка выглядит...

Значение combobox.SelectedIndex в int переменную
Доброго времени суток. Требуется записать в integer переменную значение SelectedIndex combobox'а. Как я понял, нумерация начинается с...

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.01.2018, 09:03
Цитата Сообщение от Алексей71 Посмотреть сообщение
Значение SelectedIndex в ComboBox меняется уже на этапе выбора элементов списка, когда список ещё открыт, а вот событие SelectedIndexChanged возникает только когда список закрывается после выбора элемента.
Ну так логично же: событие называется ВыбранныйИндексИзменился, а не ВыбранныйИндексСкороИзменится. Потому событие и происходит после изменения индекса.

Цитата Сообщение от Алексей71 Посмотреть сообщение
Это очень неудобно
За все годы работы с шарпом и винформами/WPF, вы первый, от кого я слышу что это неудобно

Цитата Сообщение от Алексей71 Посмотреть сообщение
Что посоветуете?
А в чем проблема?
Может вы поставленную задачу пытаетесь как-то криво решить?
0
3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 100
09.01.2018, 09:46  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Ну так логично же: событие называется ВыбранныйИндексИзменился, а не ВыбранныйИндексСкороИзменится. Потому событие и происходит после изменения индекса.
Не согласен, реально индекс меняется всякий раз, когда я вожу мышкой по открытому списку, что мне кажется совершенно не оправданным, т.к. вряд ли кому-то нужно, чтобы индекс менялся именно в этот момент.
Цитата Сообщение от kolorotur Посмотреть сообщение
А в чем проблема?
Может вы поставленную задачу пытаетесь как-то криво решить?
В коде, в зависимости от текущего значения SelectedIndex опрашиваются по таймеру те или иные значения девайса. При этом мне нужно единожды изменить интерфейс после изменения SelectedIndex, соответствующий вновь выбранному значению SelectedIndex, поэтому изменение интерфейса удобно делать не каждый раз по таймеру, а единожды по SelectedIndexChanged. Вот и получается, что когда пользователь водит мышкой по открытому списку значения, получаемые по таймеру из прибора меняются в соответствии с текущим SelectedIndex, а вот соответствующий интерфейс обновляется лишь только после закрытия списка. Получается некрасиво, могут вылезать даже ошибки времени выполнения, если размеры новых опрашиваемых данных и какого-нибудь списка в текущем интерфейсе не совпадут.
Есть, конечно, вариант, при опросе по таймеру пользоваться не SelectedIndex, а завести специальную переменную, которая будет меняться в соответствии с SelectedIndex только после SelectedIndexChanged. Но согласитесь, это криво, вводить новую переменную, когда есть готовая, но криво работающая.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.01.2018, 09:59
Лучший ответ Сообщение было отмечено Алексей71 как решение

Решение

Цитата Сообщение от Алексей71 Посмотреть сообщение
реально индекс меняется всякий раз, когда я вожу мышкой по открытому списку, что мне кажется совершенно не оправданным
А, вон вы о чем.
Не знал о такой особенности — действительно немного странно, но не критично и очень легко устраняется.

Цитата Сообщение от Алексей71 Посмотреть сообщение
В коде, в зависимости от текущего значения SelectedIndex опрашиваются по таймеру те или иные значения девайса.
Не мешайте вместе логику интерфейса и логику программы.
Не надо в обработчике тика таймера считывать значение комбобокса: считывайте локальное поле или свойство, значение которому будет присваиваться в обработчике SelectedIndexChanged.
Заодно вынесите логику опроса устройства (вместе с таймером) в отдельный класс, ничего не знающий об интерфейсе — пусть он работает сам по себе, а используемые им значения устанавливайте в открытые свойства в нужный момент из обработчиков.
1
3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 100
09.01.2018, 10:38  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Не мешайте вместе логику интерфейса и логику программы.
Не надо в обработчике тика таймера считывать значение комбобокса: считывайте локальное поле или свойство, значение которому будет присваиваться в обработчике SelectedIndexChanged.
Заодно вынесите логику опроса устройства (вместе с таймером) в отдельный класс, ничего не знающий об интерфейсе — пусть он работает сам по себе, а используемые им значения устанавливайте в открытые свойства в нужный момент из обработчиков.
Спасибо, примерно так и делаю, просто смутило несколько странное поведение контрола, подумал, может есть способ его как-то перенастроить, хотя, Вы правы, всё это, действительно, не критично.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.01.2018, 10:38
Помогаю со студенческими работами здесь

Подключение ComboBox.SelectedIndex к Enum в ObservableCollection
Добрый день. В моей программе есть Enum: public enum GlassesPlatesEnum { Air, Glass, Glass_Noice, Plate_666, Plate_028,...

Значение combobox.SelectedIndex в int переменную
Доброго времени суток. Требуется записать в integer переменную значение SelectedIndex combobox'а. Как я понял, нумерация начинается с...

[WPF] ComboBox async SelectedIndex не работает
У меня ComboBox заполняется (с использованием async/await) из базы данных при этом не работает тег SelectedIndex в XAML, если же...

Как привязать selectedindex к событию SelectedIndexChanged в ComboBox
Утро доброе! Имеется класс, наследуемый от GroupBox, в котором определен ComboBox и для него определено событие SelectedIndexChanged: ...

Combobox, a точнее его свойство Selectedindex и SelectedValue выдает -1
Программа работают по принципу нажимаешь кнопку формируются данные с бд в лист типа стринг ,происходит сразу бинд этого листа в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru