[C#](原创)⼀步⼀步教你⾃定义控件——04,ProgressBar(进度条)⼀、前⾔
技术没有先进与落后,只有合适与不合适。
本篇的⾃定义控件是:进度条(ProgressBar)。
进度条的实现⽅式多种多样,主流的⽅式有:使⽤多张图⽚去实现、使⽤1个或2个Panel放到UserControl上去实现、重载系统进度条去实现等等。
本次所实现的进度条仍是使⽤GDI+去实现。当然,如果只是实现最基本的扁平化的进度条,那完全不需要再写本篇⽂章,因为直接⼩改下第⼀篇的LTrackBar就⾏了。既然写这篇⽂章,就是实现不⼀样的、⽐较好玩和好看的进度条,如环形进度条、饼形进度条等等。
本篇使⽤的知识都是前⼏篇中已经讲过的,并没有新的技术。但是却附加了⼀些想像⼒,⼀些不拘⼀格、稍稍突破常规的想像⼒。
相信看完的你,⼀定会有所收获。
本⽂地址:
⼆、前期分析
(⼀)为什么需要⾃定义进度条?
系统⾃带的滚动条样式太过单调,同时不够“扁平化”,所以便去实现⾃⼰的滚动条。
(⼆)实现⽬标
1,⽀持三种样式
(1)横条(Bar)
(2)圆饼(Pie)
(3)圆弧(Arc)
2,⽀持显⽰和隐藏百分⽐
(1)横条(Bar)
(2)圆饼(Pie)
(3)圆弧(Arc)
3,⽀持多种进度形状
(1)连续
(2)分段块
(3)两段式:先分段块再连续
(4)螺旋
(注:只有“横条”样式时才⽀持螺旋形状)
4,⽀持Marquee样式marquee marquee
当进度⽆法确定时,便需要使⽤Marquee样式,同系统进度条的“Marquee”样式类似。不过⽀持更多的Marquee样式。
(1)左右摆动
(2)循环穿过
(3)往复(连续)
(4)划过(连续)
(5)往复(分段块)
(6)划过(分段块)
(7)螺旋
5,⽀持调整进度条各元素尺⼨和颜⾊(1)设置边框厚度和颜⾊
(2)设置背景⼤⼩和颜⾊
(3)设置进度绘制位置和颜⾊
(4)设置进度⽂本颜⾊
(5)设置弧线厚度(仅样式为“圆弧(Arc)”时有效)
(6)设置“分段块”厚度(仅进度条形状为“分段块”时有效)
三、进度条拆解
看了上⾯的实现⽬标,是不是感觉眼花缭乱、⽆从下⼿?
下⾯我就对进度条进⾏拆分讲解,⼀步⼀步来看上⾯的效果是怎么实现的。
(⼀)组成元素
进度条由三个部分组成,分别是:进度、边框、背景。
下⾯是各种样式下,三个组成部分的拆分。
1,横条(Bar)
2,圆饼(Pie)
3,圆弧(Arc)
(⼆)元素属性
进度条的三个组成元素,都有着各⾃相关的属性。
(注:因为“颜⾊”属性是必备的,所以不再赘述。)
1,边框
其相关属性为:边框的厚度。
当“厚度”为0时,看起来进度条就没有边框;
当“厚度”超过控件⾼度的⼆分之⼀时,整个进度条就变成了边框的颜⾊。
(注:因为是先绘制“背景”,再绘制“边框”,所以是“整个进度条变成边框的颜⾊”)