Если вы создаете свой собственный элемент управления, полученный из UserControl
или ScrollControl
или Form
, вы можете использовать это простое решение:
protected override void OnMouseWheel(MouseEventArgs e)
{
if (this.VScroll && (Control.ModifierKeys & Keys.Shift) == Keys.Shift)
{
this.VScroll = false;
base.OnMouseWheel(e);
this.VScroll = true;
}
else
{
base.OnMouseWheel(e);
}
}
Объяснение
Если элемент управления имеет AutoScroll
и отображает полосы прокрутки, при прокрутке колеса мыши вы получите следующее поведение:
- Если полосы прокрутки не включены, это ничего не делает.
- Если включена только вертикальная полоса прокрутки, она прокручивает вертикальную полосу прокрутки.
- Если включена только горизонтальная полоса прокрутки, она прокручивает горизонтальную полосу прокрутки.
- Если включены вертикальная и горизонтальная полосы прокрутки, она прокручивает вертикальную полосу прокрутки.
Заметив такое поведение, я понял, что этот хак переопределяет OnMouseWheel
элемента управления, затем, если активирована вертикальная полоса прокрутки и удерживается Shift , она отключает вертикальную полосу прокрутки перед вызовом base.OnMouseWheel
, Это обманет элемент управления при прокрутке горизонтальной полосы прокрутки (поведение 3, как показано выше).