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();
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值