zoukankan      html  css  js  c++  java
  • 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();
            }

    不过如果控件没有获得焦点 不起作用

  • 相关阅读:
    如何实现进程间的通信
    调试手记
    WinCE的一些忠告——UNICODE编码
    一道字符串复制的面试题目
    strcpy和strncpy区别
    关于#include头文件问题
    rs232串口通讯中,读串口与读端口的区别
    IP包过滤(转)
    小数点后截位问题
    一些函数
  • 原文地址:https://www.cnblogs.com/DoNetCShap/p/4442306.html
Copyright © 2011-2022 走看看