Introduction:
For last several weeks, I have been thinking about a progress bar which could display percentage progress of the work done but despite numerous efforts I was unable to do so as the existing progress bar control available in Visual studio.NET has no such property to display Text neither the progress bar is inheritable on User-Controls so the addition of properties and methods in the Progress Bar was not possible. Therefore, I decided to use some other method /technique to accomplish the task easily.
Development Platform:
- Microsoft Visual Basic.NET 2003 and Windows xp
- Label and Graphics.
How does it work?
I have included all the code required for building the progress bar. The user is required to set all these properties of controls and declare the desired variables.
I have used Timer Control to test the application; however, it can be substituted with loop.
Code:
Public Class frmGraphics
Inherits System.Windows.Forms.Form
Dim G As Graphics
Dim Idx As Integer = 1
Dim iPercent As Integer = 1
Dim sPercent As String = ""
Dim L As Label = New Label
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents T As System.Windows.Forms.Timer
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.T = New System.Windows.Forms.Timer(Me.components)
'
'T
'
Me.T.Enabled = True
Me.T.Interval = 10
'
'frmGraphics
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Name = "frmGraphics"
End Sub
#End Region
Private Sub frmGraphics_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'''Timer settings'''
T.Enabled = True
T.Interval = 100
T.Start()
''''Label and color settings''
L.Height = 15
L.Width = 30
L.TextAlign = ContentAlignment.MiddleRight
L.Top = 10
L.Left = 5
L.BackColor = Color.Gray
Me.BackColor = Color.Gray
Me.Controls.Add(L)
End Sub
Private Sub T_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T.Tick
If Idx >= Me.Width Then
Idx = 1
End If
Idx += 1
iPercent = CInt(Idx * 100 / Me.Width)
sPercent = iPercent & "%"
G = Me.CreateGraphics
G.FillEllipse(Brushes.Red, Idx, 10, 8, 15)
L.Left = Idx + 5
L.Text = sPercent
End Sub
End Class