Mousewheel пузырится в winforms?

У меня есть небольшая проблема с winforms и mousewheel событиями. У меня есть пользовательский элемент управления, представляющий слайдер. Теперь у меня есть пара групп ползунков, в которых каждая группа обернута внутри панели. Все группы затем завертываются на другую панель (которая имеет значение AutoScroll для true), и это завернуто в форму. Логика ползуна реализована так, что колесико мыши можно использовать для изменения его значения. Для этого пользовательское управление ползунка получает фокус, когда мышь находится над ползунком. Однако, когда я прокручиваю, также прокручивает родительскую панель AutoScroll. Я уже потерял много времени на эту проблему. Кто-нибудь знает, что здесь происходит и как я могу это решить? Я думал, что событие всплыло на родительскую панель, но я не нашел свойство Handled в событии при обработке его в элементе управления Slider (как это возможно с WPF).

большое спасибо

Мы реализовали Slider как полный пользовательский элемент управления (наследующий class UserControl) с собственным внешним видом.

Возможно, вы заметили, что UserControl не показывает событие MouseWheel в окне «Свойства». Надеюсь на неприятности. Сообщение об ошибке WM_MOUSEWHEEL. Если элемент управления, который имеет фокус, не обрабатывает его, то Windows передает его родительскому элементу. Неоднократно, пока не найдет родительское окно, которое хочет обработать его. Группа в вашем случае.

Вам нужно будет вызвать черную магию в вашем слайдере. Фактический объект args объекта, который передается в событие MouseWheel, не относится к типу MouseEventArgs, как предполагает подпись события, это HandledMouseEventArgs. Это позволяет остановить пузырь. Как это:

protected override void OnMouseWheel(MouseEventArgs e) { base.OnMouseWheel(e); // do the slider scrolling //.. ((HandledMouseEventArgs)e).Handled = true; } 

Если вы создаете событие динамически, как

 object.event += new EventHandler(eventfunction); 

попробуйте удалить регистрацию события после вызова функции event

 object.event -= new EventHandler(eventfunction);