实现自定义背景色前景色显示进度的进度条

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 教程 目录

以上是关于实现自定义背景色前景色显示进度的进度条的主要内容,如果未能解决你的问题,请参考以下文章

自定义对话框片段内的进度条 - 如何从 AsyncTask 传递进度?

C# WinForm自定义进度条

android 怎么自定义绘制如下图中这种进度条

Android绘制圆形进度条

Qt编写自定义控件34-磁盘容量统计

Android自定义View实现可拖拽的进度条