xtraScrollableControlスクロールバーをマウスでスクロール
4859 ワード
コードは次のとおりです.
実行コード
ただし、コントロールがフォーカスを取得していないと機能しません.
//
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();
}
ただし、コントロールがフォーカスを取得していないと機能しません.