WinForm滚动条重写问题。

PrinceJie 2013-05-20 06:49:36


由于项目需要,要求改变WinForm中所有控件的滚动条的背景色。

目前我已经重写了滚动条,并且能够与WinForm中自带的滚动条实现联动效果。由于窗体自带的滚动条无法隐藏,故需要对其进行覆盖。对于要修改的单个控件,可以通过设置该控件的Dock属性为Fill,设置自定义滚动条的Dock属性为Right,再将自定义滚动条设置为顶端显示的方式将原控件的滚动条屏蔽掉。

可是项目中需要修改的位置过多,若分别进行修改,很费时。我考虑将需要修改的控件进行重写,将滚动条封装进来。这样只需要重写需要修改的控件,并且在程序中代码修改量小。

但是现在遇到了一个问题无法解决,以TreeView控件为例,用继承TreeView类的方式重写TreeView控件,滚动条用this.Controls.Add()的方式添加。于是产生了上图的问题,当展开节点后,自定义滚动条无法覆盖系统系统自带的滚动条。

这个问题的产生原因应该是:由于使用this.Controls.Add()的方式添加滚动条,导致了TreeView控件与滚动条之间不再是并列关系,导致了自定义滚动条无法覆盖。可是我不知道该如何解决这个问题。

如果哪位朋友有思路或者有其他的解决方案的话请帮下我吧,愁死我了。只需要最终实现改变所有控件的滚动条的颜色的功能就可以了。
...全文
607 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
无限期隐身 2015-10-30
  • 打赏
  • 举报
回复
这个滚动条的源码能提供吗
Apeng520652 2014-09-23
  • 打赏
  • 举报
回复
Apeng520652 2014-09-23
  • 打赏
  • 举报
回复
回复 wzj_710 请问那个右边的那个蓝色滚动条是怎么弄出来的喔求指导
无限期隐身 2014-04-25
  • 打赏
  • 举报
回复
请问,能告诉,怎么重绘滚动条的背景色的吗?
tanghuawei 2013-07-15
  • 打赏
  • 举报
回复
请问你自己写的滚动条,怎么跟TreeView联动啊?
PrinceJie 2013-05-20
  • 打赏
  • 举报
回复
引用 1 楼 whqjj2006 的回复:
试试隐藏系统滚动条

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
      ShowScrollBar(this.Handle, 3, false);//0:horizontal,1:vertical,3:both
      base.WndProc(ref m);
    }

[DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow);
太好了,可以用,系统自带的滚动条隐藏了。 问题解决了,谢了大哥!
whqjj2006 2013-05-20
  • 打赏
  • 举报
回复
试试隐藏系统滚动条

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
      ShowScrollBar(this.Handle, 3, false);//0:horizontal,1:vertical,3:both
      base.WndProc(ref m);
    }

[DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow);

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧