C#滚动条重写问题。

由于项目需要,要求改变WinForm中所有控件的滚动条的背景色。目前我已经重写了滚动条,并且能够与WinForm中自带的滚动条实现联动效果。由于窗体自带的滚动条无法隐藏,... 由于项目需要,要求改变WinForm中所有控件的滚动条的背景色。
目前我已经重写了滚动条,并且能够与WinForm中自带的滚动条实现联动效果。由于窗体自带的滚动条无法隐藏,故需要对其进行覆盖。对于要修改的单个控件,可以通过设置该控件的Dock属性为Fill,设置自定义滚动条的Dock属性为Right,再将自定义滚动条设置为顶端显示的方式将原控件的滚动条屏蔽掉。
可是项目中需要修改的位置过多,若分别进行修改,很费时。我考虑将需要修改的控件进行重写,将滚动条封装进来。这样只需要重写需要修改的控件,并且在程序中代码修改量小。
但是现在遇到了一个问题无法解决,以TreeView控件为例,用继承TreeView类的方式重写TreeView控件,滚动条用this.Controls.Add()的方式添加。于是产生了上图的问题,当展开节点后,自定义滚动条无法覆盖系统系统自带的滚动条。
这个问题的产生原因应该是:由于使用this.Controls.Add()的方式添加滚动条,导致了TreeView控件与滚动条之间不再是并列关系,导致了自定义滚动条无法覆盖。可是我不知道该如何解决这个问题。
如果哪位朋友有思路或者有其他的解决方案的话请帮下我吧,愁死我了。只需要最终实现改变所有控件的滚动条的颜色的功能就可以了。
展开
 我来答
浮__浮
推荐于2016-11-01 · 超过13用户采纳过TA的回答
知道答主
回答量:19
采纳率:0%
帮助的人:35.9万
展开全部
试试隐藏系统滚动条。
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);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
空雪梦见
2013-05-20 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1195万
展开全部
可以拿控件的Parent吗?
拿到以后如果拿到的Control是Form了,那就转成Form类型,之后往Controls里面塞

不过我不确定你创建滚动条的时机是不是在Parent被设置之后……如果还没设置,那看看能不能换一个时机创建你的滚动条
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a97606d
2013-05-20 · TA获得超过190个赞
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:156万
展开全部
你试过 Scrollable属性吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式