C#滚动条重写问题。
由于项目需要,要求改变WinForm中所有控件的滚动条的背景色。目前我已经重写了滚动条,并且能够与WinForm中自带的滚动条实现联动效果。由于窗体自带的滚动条无法隐藏,...
由于项目需要,要求改变WinForm中所有控件的滚动条的背景色。
目前我已经重写了滚动条,并且能够与WinForm中自带的滚动条实现联动效果。由于窗体自带的滚动条无法隐藏,故需要对其进行覆盖。对于要修改的单个控件,可以通过设置该控件的Dock属性为Fill,设置自定义滚动条的Dock属性为Right,再将自定义滚动条设置为顶端显示的方式将原控件的滚动条屏蔽掉。
可是项目中需要修改的位置过多,若分别进行修改,很费时。我考虑将需要修改的控件进行重写,将滚动条封装进来。这样只需要重写需要修改的控件,并且在程序中代码修改量小。
但是现在遇到了一个问题无法解决,以TreeView控件为例,用继承TreeView类的方式重写TreeView控件,滚动条用this.Controls.Add()的方式添加。于是产生了上图的问题,当展开节点后,自定义滚动条无法覆盖系统系统自带的滚动条。
这个问题的产生原因应该是:由于使用this.Controls.Add()的方式添加滚动条,导致了TreeView控件与滚动条之间不再是并列关系,导致了自定义滚动条无法覆盖。可是我不知道该如何解决这个问题。
如果哪位朋友有思路或者有其他的解决方案的话请帮下我吧,愁死我了。只需要最终实现改变所有控件的滚动条的颜色的功能就可以了。 展开
目前我已经重写了滚动条,并且能够与WinForm中自带的滚动条实现联动效果。由于窗体自带的滚动条无法隐藏,故需要对其进行覆盖。对于要修改的单个控件,可以通过设置该控件的Dock属性为Fill,设置自定义滚动条的Dock属性为Right,再将自定义滚动条设置为顶端显示的方式将原控件的滚动条屏蔽掉。
可是项目中需要修改的位置过多,若分别进行修改,很费时。我考虑将需要修改的控件进行重写,将滚动条封装进来。这样只需要重写需要修改的控件,并且在程序中代码修改量小。
但是现在遇到了一个问题无法解决,以TreeView控件为例,用继承TreeView类的方式重写TreeView控件,滚动条用this.Controls.Add()的方式添加。于是产生了上图的问题,当展开节点后,自定义滚动条无法覆盖系统系统自带的滚动条。
这个问题的产生原因应该是:由于使用this.Controls.Add()的方式添加滚动条,导致了TreeView控件与滚动条之间不再是并列关系,导致了自定义滚动条无法覆盖。可是我不知道该如何解决这个问题。
如果哪位朋友有思路或者有其他的解决方案的话请帮下我吧,愁死我了。只需要最终实现改变所有控件的滚动条的颜色的功能就可以了。 展开
3个回答
展开全部
试试隐藏系统滚动条。
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);
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);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以拿控件的Parent吗?
拿到以后如果拿到的Control是Form了,那就转成Form类型,之后往Controls里面塞
不过我不确定你创建滚动条的时机是不是在Parent被设置之后……如果还没设置,那看看能不能换一个时机创建你的滚动条
拿到以后如果拿到的Control是Form了,那就转成Form类型,之后往Controls里面塞
不过我不确定你创建滚动条的时机是不是在Parent被设置之后……如果还没设置,那看看能不能换一个时机创建你的滚动条
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你试过 Scrollable属性吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询