• 控制带有滚动条的控件(ListView,TreeView等)的滚动条显示


    这是一个小小的组件,实现控制带有滚动条的控件(ListViewTreeView)的滚动条显示。

        带有滚动条的控件,通常情况下都是需要显示滚动条的时候,如果水平滚动条和垂直滚动条都需要显示,就一起显示出来。但是有的时候我们只想让其只显示一条滚动条,例如只显示垂直滚动条,我们应该怎么办呢?

    下面是一种可选方案:
     

        /// <summary>

        /// 作者:Starts_2000

        /// 日期:2009-07-14

        /// 网站:http://www.csharpwin.com CS 程序员之窗。

        /// 你可以免费使用或修改以下代码,但请保留以上版权信息。

        /// 具体请查看 CS程序员之窗开源协议(http://www.csharpwin.com/csol.html)。

        /// 功能:控制有滚动条的控件的滚动条是否显示。

        /// </summary>

        public class ScrollBarManager : NativeWindow, IDisposable

        {

            private Control _owner;

            private SB _scrollBar;

            private const int GWL_STYLE = -16;

            private const int WS_HSCROLL = 0x00100000;

            private const int WS_VSCROLL = 0x00200000;

            public ScrollBarManager(Control owner, SB scrollBar)

            {

                if (owner == null)

                {

                    throw new ArgumentNullException("owner");

                }

                base.AssignHandle(owner.Handle);

                _owner = owner;

                _scrollBar = scrollBar;

            }

            [DllImport("user32.dll")]

            private static extern int ShowScrollBar(IntPtr hWnd, int iBar, int bShow);

            [DllImport("user32.dll")]

            private static extern int GetWindowLong(IntPtr hwnd, int nIndex);

            protected override void WndProc(ref Message m)

            {

                HideScrollBar(ref m);

                base.WndProc(ref m);

            }

            private void HideScrollBar(ref Message m)

            {

                int dwStyle = GetWindowLong(base.Handle, GWL_STYLE);

                switch (_scrollBar)

                {

                    case SB.SB_HORZ:

                        if ((dwStyle & WS_HSCROLL) == WS_HSCROLL)

                        {

                            ShowScrollBar(base.Handle, (int)_scrollBar, 0);

                        }

                        break;

                    case SB.SB_VERT:

                        if ((dwStyle & WS_VSCROLL) == WS_VSCROLL)

                        {

                            ShowScrollBar(base.Handle, (int)_scrollBar, 0);

                        }

                        break;

                }

            }

            #region IDisposable 成员

            public void Dispose()

            {

                base.ReleaseHandle();

                _owner = null;

            }

            #endregion

        }

        

        /// <summary>

        /// 作者:Starts_2000

        /// 日期:2009-07-14

        /// 网站:http://www.csharpwin.com CS 程序员之窗。

        /// 你可以免费使用或修改以下代码,但请保留以上版权信息。

        /// 具体请查看 CS程序员之窗开源协议(http://www.csharpwin.com/csol.html)。

        /// </summary>

        public enum SB

        {

            /// <summary>

            /// 水平滚动条。

            /// </summary>

            SB_HORZ = 0,

            /// <summary>

            /// 垂直滚动条。

            /// </summary>

            SB_VERT = 1,

        }

    源及源码下载地址:http://eran.555ip.com/Information/0/330/ 



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    test
    linux安装web服务小总结-用户和权限
    linux安装pure-ftpd和配置
    空值等
    学习laravel
    vb窗体内获取窗体内坐标颜色值
    自从我安装卸载几次OFFICE和WPS后,VB6就出现了这样的问题。
    VB动态添加WebBrowser控件,并拦截弹出窗口(不用引用任何组件)
    部件ieframe.dll或其附件之一不能正确注册:一个文件丢失或无效
    修改组策略,轻松控制游戏许可权。
  • 原文地址:https://www.cnblogs.com/08shiyan/p/2219887.html
Copyright © 2020-2023  润新知