Событие MouseWheel не срабатывает для неотключаемого элемента управления - PullRequest
0 голосов
/ 02 сентября 2018

Я написал собственный элемент управления, основанный на другом коде, который включает в себя вызов SetStyle(ControlStyles.Selectable, false);

Это предотвращает вызов следующего кода (который работает, если я уберу вышеуказанную строку и сначала нажму на элемент управления, чтобы «сфокусировать» его):

    protected override void OnMouseWheel(MouseEventArgs e)
    {
        ScrollBar.Value = Math.Min(ScrollBar.Value - e.Delta, ScrollBar.Maximum - ScrollBar.LargeChange);

        LayoutChanged();
    }

Мой элемент управления не нуждается в фокусировке, поэтому Selectable=false является правильным.

Что мне нужно сделать, чтобы я мог запускать этот код всякий раз, когда мышь находится над моим контролем, а колесико мыши перемещается независимо от того, где находится фокус?

Спасибо за комментарии. Дополнительная информация: -

  • Я использую Windows 7, но любое решение должно работать на любой ОС.

  • Элемент управления наследуется через Control / ControlBase / BaseControl / BaseStyleControl, где последние 3 являются элементами управления DevExpress.

  • Реальный фокус не следует менять только потому, что курсор находится над моим элементом управления
  • Нет дочерних элементов управления, кроме полосы прокрутки (унаследованной DevExpress), которая обычно невидима и показывает себя, когда указатель мыши находится над тем местом, где он был бы при отображении.
  • Элемент управления не делает ничего, кроме рисования самого себя (представьте себе несколько книжных полок, расположенных один под другим, с нарисованными на них обложками книг - количество полок увеличивается, чтобы вместить все книги, а полоса прокрутки позволяет прокручивать все в поле зрения.
  • Поскольку этот элемент управления используется везде, получение событий MouseWheel от Parent, который знает о своих требованиях, не является хорошей идеей.

  • Может быть, есть способ регистрации на первый взгляд (это MessagePreview?), Чтобы зажимать события MouseWheel до того, как произойдет нормальная обработка.

...