http://www.myfirm.cn/news/DotNetUserInterface/20080208095730391.html
写在前面:如果大家觉得.Net自带的GroupBox控件太差了,样子很不美观,而想用.Net强大的自定义功能来实现定制控件,如,在GroupBox的Title那里加个Button形状的东西,给GroupBox的四周的角都变成圆的,给GroupBox加个背景色,并且有过渡效果。那,请您看看,下面的效果图,是不是您所需要的?就是不是你需要的,但是不是有很大的参考价值?应该是吧。
介绍此自定义控件的源网址是:http://www.codeproject.com/KB/miscctrl/grouper.aspx
代码是用C#来写的。在那里,你可以下载到自定义控件的源码,不过,请您尊重作者的原创。
设计剖析
新自定义一个UserControl,然后按GroupBox的样子画出控件。
布局
不继承GroupBox而直接新建一个UserControl控件,需要勇气和技术,GroupBox有如下的部分:标题,也就是GroupBox左上角部分,在此控件中,被打包成一个Button的样子,Button的四个角都是平滑而有弧度的,而且,可以放图片,可以定义控件的固定位置,如UserControl的Left,Top设计好,然后开始画这个Button,而Shadow也是通过画椭圆弧来实现的,Button中的过渡色,可以通过LinearGradientBrush等类提供的方法来实现,Brush中提供了一,二和三维的颜色方案。
GroupBox的角,椭圆弧和Shadow也是这样画出来的,这需要编程者,有比较深厚的GUI经验和耐心的调试。对于GroupBox的内部,使用UserControl默认的容器形式。
根据这样的布局,产生了多个属性的设置,如源背景色,过渡后的背景色,Title的弧度,GroupBox的弧度等。
动作
.Net标准GroupBox本身自带的动作并不是很多,这也是自定义控件在布局做得很强的原因,因为根本不用写动作的。一般只会有Resize的动作,这样,要激发重画的动作。而整个自定义控件设计的画路也是比较的简单的,在OnPaint方法上面做了所有的动作。包括画GroupBox和Button等内容。