Заставить вкладку не обрабатывать события колесика мыши (C #)

Я сделал приложение MDI (с вкладками), которое использует PictureBoxes внутри TabPages. Окно изображения иногда больше, чем страница вкладки, поэтому появляются полосы прокрутки. Он написан на C # с использованием Windows Forms.

Внутри своей вкладки я фиксирую и обрабатываю события колесика мыши в событии MouseWheel (я использую его для поворота некоторых объектов, которые рисую в окне изображения).

Но когда у меня есть полосы прокрутки, когда я вращаю колесо мыши, мои объекты вращаются, но страница вкладок также прокручивается вниз.

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


person Ove    schedule 29.08.2009    source источник


Ответы (1)


Подкласс TabPage и переопределите метод WndProc(), чтобы игнорировать сообщение WM_MOUSEWHEEL:

public class MyTabPage : TabPage
{
  private const int WM_MOUSEWHEEL = 0x20a;

  protected override void WndProc(ref Message m)
  {
    // ignore WM_MOUSEWHEEL events
    if (m.Msg == WM_MOUSEWHEEL)
    {
      return;
    }

    base.WndProc(ref m);
  }
}

Затем используйте подкласс MyTabPage вместо стандартного TabPage.

person Ian Kemp    schedule 29.08.2009
comment
Работает! Спасибо! PS: Есть ли другой способ, который не потребовал бы от меня создания другого класса? - person Ove; 29.08.2009