由于项目需要,要求改变WinForm中所有控件的滚动条的背景色。
目前我已经重写了滚动条,并且能够与WinForm中自带的滚动条实现联动效果。由于窗体自带的滚动条无法隐藏,故需要对其进行覆盖。对于要修改的单个控件,可以通过设置该控件的Dock属性为Fill,设置自定义滚动条的Dock属性为Right,再将自定义滚动条设置为顶端显示的方式将原控件的滚动条屏蔽掉。
可是项目中需要修改的位置过多,若分别进行修改,很费时。我考虑将需要修改的控件进行重写,将滚动条封装进来。这样只需要重写需要修改的控件,并且在程序中代码修改量小。
但是现在遇到了一个问题无法解决,以TreeView控件为例,用继承TreeView类的方式重写TreeView控件,滚动条用this.Controls.Add()的方式添加。于是产生了上图的问题,当展开节点后,自定义滚动条无法覆盖系统系统自带的滚动条。
这个问题的产生原因应该是:由于使用this.Controls.Add()的方式添加滚动条,导致了TreeView控件与滚动条之间不再是并列关系,导致了自定义滚动条无法覆盖。可是我不知道该如何解决这个问题。
如果哪位朋友有思路或者有其他的解决方案的话请帮下我吧,愁死我了。只需要最终实现改变所有控件的滚动条的颜色的功能就可以了。