В настоящее время я использую MSCharts в одной из моих оконных форм. Одна из причудливых особенностей MSCharts заключается в том, что вы не можете инициировать событие MouseWheel
на диаграмме, если диаграмма не находится в фокусе. Чтобы бороться с этим, большинство людей говорят, что нужно добавить событие MouseEnter
в диаграмму, а затем Focus()
диаграмму, чтобы разрешить запуск событий MouseWheel
(см. здесь: Включение масштабирования колесика мыши в Microsoft Chart Control).
Допустим, я открыл совершенно другое окно (назовем его Window A
), которое оказалось частично перед моей диаграммой (назовем его окном Window B
). Если я случайно наведу указатель мыши на график в Window B
хотя бы на 10 миллисекунд, Window B
получит фокус, а Window A
окажется за ним, что невероятно неприятно.
Я изучил разные варианты.
- Установка свойства
TopMost
Window B
в значение true. Проблема в том, что пользователь должен либо закрыть окно, либо свернуть его, чтобы скрыть его. Если открыто много окон, это кажется таким же неприятным, как и первоначальная проблема. - Вместо того, чтобы давать событию
MouseEnter
возможностьFocus()
, пусть событиеMouseClick
илиMouseHover
будетFocus()
. Проблема сMouseClick
заключается в том, что пользователю всегда придется сначала щелкнуть диаграмму, чтобы увеличить ее, что неплохо, но может раздражать.MouseHover
нормально, но время, которое событие считает зависанием, очень короткое.
В конце концов, я хочу, чтобы я мог наводить указатель мыши на график и прокручивать его без каких-либо действий (щелчков мыши или чего-либо еще). Вдобавок к этому я не хочу, чтобы форма, содержащая диаграмму, возвращала на нее фокус, если я случайно наведу на нее указатель мыши всего на секунду.
РЕДАКТИРОВАТЬ:
Похоже, что, согласно @TaW, диаграмме не требуется фокус для запуска событий MouseWheel
в окне 10. К сожалению, это не так в Windows 7.