XtraScrollableControl 滚动条控件随鼠标滚动

using System;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace WindowsFormsApplication1 {
    public class ScrollHelper {

        readonly XtraScrollableControl _scrollableControl;

        public ScrollHelper(XtraScrollableControl scrollableControl) { _scrollableControl = scrollableControl; }

        public void EnableScrollOnMouseWheel() { _scrollableControl.VisibleChanged += OnVisibleChanged; }

        void OnVisibleChanged(object sender, EventArgs e) {
            _scrollableControl.Select();
            UnsubscribeFromMouseWheel(_scrollableControl.Controls);
            SubscribeToMouseWheel(_scrollableControl.Controls);
        }

        public void SubscribeToMouseWheel(Control.ControlCollection controls) {
            foreach (Control ctrl in controls) {
                ctrl.MouseWheel += OnMouseWheel;
                SubscribeToMouseWheel(ctrl.Controls);
            }
        }

        public void UnsubscribeFromMouseWheel(Control.ControlCollection controls)
        {
            foreach (Control ctrl in controls) {
                ctrl.MouseWheel -= OnMouseWheel;
                UnsubscribeFromMouseWheel(ctrl.Controls);
            }
        }

        void OnMouseWheel(object sender, MouseEventArgs e) {
            DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
            var scrollValue = _scrollableControl.VerticalScroll.Value;
            var largeChange = _scrollableControl.VerticalScroll.LargeChange;
            if (e.Delta < 0)
                _scrollableControl.VerticalScroll.Value += _scrollableControl.VerticalScroll.LargeChange;
            else
                if (scrollValue < largeChange) { _scrollableControl.VerticalScroll.Value = 0; }
                else { _scrollableControl.VerticalScroll.Value -= largeChange; }
        }

        public void DisableScrollOnMouseWheel() {
            _scrollableControl.VisibleChanged -= OnVisibleChanged;
            UnsubscribeFromMouseWheel(_scrollableControl.Controls);
        }

    }
}

调用方法:

        private ScrollHelper _scrollHelper;

        public 构造函数()
        {
            InitializeComponent();

            _scrollHelper = new ScrollHelper(xtraScrollableControl1);
            _scrollHelper.EnableScrollOnMouseWheel();
        }
原文地址:https://www.cnblogs.com/ShaYeBlog/p/4978843.html