C# WinForm win7中鼠标滚轮无法滚动

 

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

 

posted @ 2021-06-28 18:07  爱恋的红尘  阅读(740)  评论(0编辑  收藏  举报