实现自定义背景色前景色显示进度的进度条
Posted VB.Net
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现自定义背景色前景色显示进度的进度条相关的知识,希望对你有一定的参考价值。
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
默认情况下,VB.Net自带的进度条都是固定颜色的。即使设置前景色、背景色也没用,另外,自带进度条也不显示当前进度数值。
实际使用时,如果有特殊需求,使用默认进度条,显然效果不太好。
本篇文章建立一个ProgressBar的继承类NewProgressBar,从而实现自定义背景色、前景色、显示进度的进度条。
最终实现效果:
NewProgressBar的代码:
Public Class NewProgressBar
Inherits ProgressBar
Public Property FontColor As Color
Public Sub New()
Me.SetStyle(ControlStyles.UserPaint, True)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim percent As Integer
percent = CType((Value * 100) / Maximum, Integer)
Dim rec As Rectangle = e.ClipRectangle
rec.Width = CType((rec.Width * Value / Maximum), Integer) - 4
If ProgressBarRenderer.IsSupported Then
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle)
End If
rec.Height = rec.Height - 4
e.Graphics.FillRectangle(New SolidBrush(Me.BackColor), 0, 0, e.ClipRectangle.Width, e.ClipRectangle.Height)
e.Graphics.FillRectangle(New SolidBrush(Me.ForeColor), 2, 2, rec.Width, rec.Height)
e.Graphics.DrawString(percent.ToString & "%", New Font("宋体", 10), New SolidBrush(FontColor), New Point(0, 5))
MyBase.OnPaint(e)
End Sub
End Class
其中,背景色、前景色使用ProgressBar这个基类的(虽然对于ProgressBar没用),增加了FontColor属性来设置进度数值的颜色。
窗体代码:
窗体载入时:
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
newpro = New NewProgressBar
newpro.Left = 20
newpro.Top = 40
newpro.Width = 200
newpro.BackColor = Color.FromArgb(128, 255, 128)
newpro.ForeColor = Color.DeepSkyBlue
newpro.FontColor = Color.White
newpro.Maximum = 100
Me.Controls.Add(newpro)
newpro.Visible = True
End Sub
向添加Timer组件。设置Timer的Tick事件代码:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
newpro.Value += 1
If newpro.Value = newpro.Maximum Then Timer1.Stop()
End Sub
窗体上按钮代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Timer1.Start()
End Sub
如果觉得代码中生成调用NewProgressBar不方便,也可以像普通控件一样从工具箱中调用。当NewProgressBar类的代码完成后,可以从工具箱找到这个组件,拖放到窗体上:
直接在属性窗口中设置相关属性:
向窗体添加一个Button和Timer,增加代码如下:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Timer2.Start()
End Sub
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
NewProgressBar1.Value += 1
If NewProgressBar1.Value = NewProgressBar1.Maximum Then Timer2.Stop()
End Sub
运行效果:
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供的参考。
学习更多vb.net知识,请参看 vb.net 教程 目录
以上是关于实现自定义背景色前景色显示进度的进度条的主要内容,如果未能解决你的问题,请参考以下文章