面向所有人的平滑进度条! 第 2 部分






4.61/5 (67投票s)
2005年2月19日
4分钟阅读

203429

2738
一个功能多样的进度条控件,支持垂直和水平模式、渐变等更多功能。
引言
我对我的SmoothProgressBar的代码进行了彻底的重构,现在它支持使用渐变来显示控件的前景和背景。此功能是可选的,默认为实心前景和背景,就像原始的SmoothProgressBar控件一样。我决定将此版本作为新文章发布,以便您可以将代码技术与原始版本进行比较。
背景
请参阅第一篇文章,了解有关此控件的背景信息以及我创建它的原因。
使用代码
我添加了几个新属性,并更改了原始控件中的一些内容。我发现如果属性名为Step
,并且用方括号括起来,就可以正常工作,例如:
Public Property [Step]() As Integer
不带方括号声明它会导致错误,因为Step
是VB中的一个关键字,所以Visual Studio会报错:Keyword is not valid as an identifier.
我还将递增Value
属性的方法名称从Stepit()
更改为PerformStep()
,以便更容易地用此控件替换.NET自带的ProgressBar
控件,因为.NET控件中使用的就是这个名称。
为了支持渐变显示,控件中有几个新属性。首先,ProgressBarColor
属性已重命名为BarColor1
。此外,还有一个BarColor2
属性,用于设置进度条(前景)渐变混合的结束颜色。当然,还有BackColor1
和BackColor2
属性,它们对控件的背景色具有相应的效果。
Horizontal
属性已重命名为Orientation
,Reverse
属性现已改为Direction
。它们不再是Boolean
类型,而是使用Enum
类型的值,以更准确地描述其功能。
新属性BarColorStyle
和BackColorStyle
默认为Solid
;要使用渐变混合,请将其更改为Gradient
。BarGradientMode
和BackGradientMode
枚举了标准的渐变方向值:Horizontal
、Vertical
、ForwardDiagonal
和BackwardDiagonal
。
BarSigmaMode
和BackSigmaMode
默认为Normal
。当设置为SigmaBell
时,BarSigmaFocus
、BarSigmaScale
、BackSigmaFocus
和BackSigmaScale
属性用于塑造定义渐变中心和衰减率的钟形曲线。BarGradientStretch
控制进度条(前景)的渐变混合是否随着进度条的推进而拉伸。如果这听起来不清楚,只需下载示例代码并尝试这些属性值,以便更好地理解它们的作用。
关注点
我已放弃在Value
属性的setter代码部分计算更新区域的技术。最初这样做是为了允许只更新控件中与前一个值不同的部分。后来我决定在更改Value
属性后简单地使整个控件失效的代码更少,但这会导致控件重绘时闪烁,因此需要更新区域代码。相反,我从Control
继承了该控件,而不是UserControl
,并将Style
设置为使用双缓冲来避免闪烁。这通过以下语句实现,放在Sub New()
中,在调用InitializeComponent()
之后:
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer _
Or ControlStyles.UserPaint, True)
值得注意的是,UserPaint
样式仅适用于派生自Control
的类。
另一点值得注意的是,Control
中的某些属性对于SmoothProgressBar
是不需要的,并且通过将Browsable
属性设置为False
来隐藏它们在属性网格中显示。例如:
<Browsable(False)> _
Shadows ReadOnly Property Font() As Font
Get
Return MyBase.Font
End Get
End Property
该属性必须声明为Shadows
,否则Visual Studio会报错。
property 'Font' shadows an overridable method in a base class.
To override the base method, this method must be declared 'Overrides'.
结论
我认为这将是我创建更好进度条的最后努力,我对结果相当满意。请下载源代码和演示项目,将其与第一篇文章进行比较,并留下评论!我注意到原始文章有近2500次浏览,但只有两个人评分,所以如果你喜欢这篇文章和这个控件(即使你不喜欢),请花点时间给它评分。我等你回复!
历史
- 2005年2月19日
- 初始发布。
- 2005年2月28日
- 添加了SPB_Help.zip,其中包含SmoothProgressBar.chm帮助文件和SPB.xml,以便在Visual Studio中获得智能感知支持(有关详细信息,请参阅下载中的Read Me.txt文件)。