Shift +鼠标滚轮水平滚动

Jef*_*f B 8 .net c# vb.net winforms

shift +滚轮的使用对于水平滚动来说相当常见.

这两个都很容易捕获.我可以使用带有KeyDown,KeyUp事件设置的标志的MouseWheel事件来跟踪按下shift键的时间.

但是,我如何实际触发水平滚动?我知道WM_MOUSEHWHEEL,可以用来触发事件吗?

更新:对于System.Windows.Form有一个HorizontalScroll类型的属性HScrollProperties.您可以操纵该Value对象上的属性以更改水平滚动条的位置.但是,到目前为止,我还没有发现该对象可用的任何其他控件.

Alv*_*ong 13

如果您要创建自己的控件派生自UserControlScrollControlForm,您可以使用这个简单的解决方案:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

说明

如果控件具有AutoScroll并且正在显示滚动条,则滚动鼠标滚轮时将出现以下行为:

  1. 如果没有启用滚动条,则不执行任何操作.
  2. 如果仅启用垂直滚动条,则会滚动垂直滚动条.
  3. 如果仅启用水平滚动条,则会滚动水平滚动条.
  4. 如果同时启用了垂直和水平滚动条,则会滚动垂直滚动条.

注意到这种行为,我想出了这个hack来覆盖OnMouseWheel控件,然后如果垂直滚动条被启用并被Shift按下,它会在调用之前禁用垂直滚动条base.OnMouseWheel.这将在滚动水平滚动条时欺骗控件(行为3如上所示).