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();
        }
时间: 2024-08-02 21:15:14

XtraScrollableControl 滚动条控件随鼠标滚动的相关文章

解决ScrollViewer嵌套的DataGrid、ListBox等控件的鼠标滚动事件无效

C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里面嵌套一个DataGrid.ListBox.Listview(控件本身有scrollviewer)的时候,我们本想要的效果是鼠标滚动整个ScrollViewer的内容,但你会发现实际结果和你想像的不一样,内部有scrollviewer的内容不会随鼠标的滚动而滚动,怎么办呢? 解决办法如下: 先截取外面的ScrollViewer的滚动事件,然后再重新让外面的ScrollViewer触发滚动事件就可以了 假设有2个控件,一

MFC编程入门之二十六(常用控件:滚动条控件ScrollBar)

回顾上一节,讲的是组合框控件Combo Box的使用.本节详解滚动条控件Scroll Bar的相关内容. 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框和组合框设置了相应属性后,如果列表项显示不下也会出现滚动条.滚动条分为水平滚动条(Horizontal Scroll Bar)和垂直滚动条(Vertical Scroll Bar)两种.滚动条中有一个滚动块,用于标识滚动条当前滚动的位置.我们可以拖动滚动条,也可以用鼠标点击滚动条某一位置使滚动块移动. 从

VS2010-MFC(常用控件:滚动条控件Scroll Bar)

转自:http://www.jizhuomi.com/software/191.html 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框和组合框设置了相应属性后,如果列表项显示不下也会出现滚动条.滚动条分为水平滚动条(Horizontal Scroll Bar)和垂直滚动条(Vertical Scroll Bar)两种.滚动条中有一个滚动块,用于标识滚动条当前滚动的位置.我们可以拖动滚动块,也可以用鼠标点击滚动条某一位置使滚动块移动. 从滚动条的创建形式

自己开发基于c#的垂直滚动条控件

由于Visual Studio工具箱中自带滚动条控件外观太老,而且没有颜色外观属性可设置. 所以自己就试着开发一个垂直的滚动条,它可以用来控制TextBox的滚动. 由于代码比较多,源文件已经打包到网盘,链接:http://pan.baidu.com/s/1dDtn8sD Release目录下生成的dll可以添加至工具箱 使用时需要设置的属性: #region 滑动条最短长度 [System.ComponentModel.Browsable(true)] [Localizable(true)]

javascript控件开发之滚动条控件

首先,基于行前几篇开发的的框架,我们在目录 component\ui\下添加文件 com.ui.scrollBar.js, 在文件中定义com.ui.scrollBar类,继承com.ui.window类,如下/** * 滚动条控件. * 创建:QZZ * 日期:2014-03-01 */ (function(undefined) { nameSpace("com.ui"); /** * 滚动条控件. */ com.ui.scrollBar = Extend(com.ui.window

Static控件响应鼠标事件

tatic控件默认是不支持响应鼠标消息的,如果把其ID从IDC_STATIC改成其他的,可见其可以响应BN_CLICKED消息,但这远远不够.但是MS也没有把路堵死,我们可以利用SetWindowLong,动态增加 其SS_NOTIFY风格,使其支持鼠标响应. 1.不重载CStatic,使静态文本控件支持鼠标消息的办法 //可以在InitDialog中添加 DWORD dwStyle = m_static1.GetStyle(); dwStyle |= SS_NOTIFY; SetWindowL

[转载]SysListView32控件响应鼠标单击消息

本文出自程序人生 >> SysListView32控件响应鼠标单击消息作者:代码疯子 SysListView32控件就是列表视图控件(MFC里面的CListCtrl就是对SysListView32进行的封装).如果想知道用户选择了哪个元素,可以这么响应消息(注意,这里是Report风格): 1 // Coded by 代码疯子 2 // http://www.programlife.net/ 3 case WM_NOTIFY: 4 switch (((LPNMHDR)lParam)->c

VB.Net / VB 如何隐藏 WebBrowser 控件 中之滚动

VB.Net / VB 如何隐藏 WebBrowser 控件 (组件) 中之滚动 由于 WebBrowser 控件组件 并未提供 滚动设定的属性 , 因此必须自行处理啰 ! > Private Sub WebBrowser1_DocumentCompleted _ (ByVal sender As System.Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles _ WebBrowser1.DocumentComple

PyQt5复杂控件(树控件、选项卡控件(滚动条控件、多文档控件、停靠控件)

1.树控件的基本使用方法QTreeWidget'''QTreeWidget树控件的使用方法添加图标,添加表格,添加复选框等'''from PyQt5.QtWidgets import *from PyQt5.QtCore import Qtfrom PyQt5.QtGui import QIcon,QBrush,QColorimport sys class treewidget(QMainWindow): def __init__(self): super(treewidget,self).__