C# Net winform在win7中鼠标滚轮无法滚动
C# winform在win7中鼠标滚轮无法滚动控件
NEt winform在win7中鼠标滚轮 无法滚动
首先我参考于:
https://blog.csdn.net/Jef_Zhang/article/details/105764324
然后经过测试是在win7上只能滚动激活的控件,
正和上面博客写的是一个道理,
但是他写的太复杂了,有一些复杂的控件他这个判断也不得行。
然后我改良了一下。
public static class ControlHelper { static ControlHelper() { IsLessWin7 = Environment.OSVersion.Version < new Version("6.2"); } #region Win7滚动条不滚动的解决方案 /// <summary> /// 是否小于win7系统 /// </summary> public static bool IsLessWin7; /// <summary> /// 初始化Control使其可以滚动(用户任何控件内便可以滚动,如果动态新加的控件就没有效果)(BUG:有突然点击乱跳的问题,有弹出来的窗体关闭跳动的问题) /// </summary> /// <param name="panel"></param> public static void InitControlScroll(Control control) { //只在win7以下版本执行 if (!IsLessWin7) return; control.Click += (obj, arg) => { control.Select(); }; foreach (Control control2 in control.Controls) { control2.Click += (obj, arg) => { control2.Select(); }; InitControlScroll(control2); } } /// <summary> /// 初始化Panel使其可以滚动(用户点击滚动条或Panel德空白区域便可以滚动)(BUG:有突然点击乱跳的问题,非全Panel效果不好) /// </summary> /// <param name="panel"></param> public static void InitPanelScroll(Panel panel) { //只在win7以下版本执行 if (!IsLessWin7 && !panel.AutoScroll) return; panel.Click += (obj, arg) => { panel.Select(); }; InitScroll(panel); foreach (Control control2 in panel.Controls) { if (control2 is Panel panel2) { control2.Click += (obj, arg) => { control2.Select(); }; InitScroll(panel); InitPanelScroll(panel2); } } } /// <summary> /// 初始化滚动条(用户点击滚动条便可以滚动) /// </summary> /// <param name="scrollableControl"></param> public static void InitScroll(ScrollableControl scrollableControl) { //只在win7以下版本执行 if (!IsLessWin7) return; scrollableControl.Scroll += (obj, arg) => { scrollableControl.Select(); }; } #endregion
调用:
ControlHelper.InitScroll(panelBkb);//推荐调用此方式,此方法没有bug,其他方法效果不好
非常简单的代码,
ok