面向所有人的平滑进度条! 第 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文件)。
 
