2 minutes
Indicating Infinite Progress, or lack thereof
clovett
[
posted this sample
of a progress bar that does not progress to GDN at some point in the past and I had occasion to use it today. Using irrational coder logic, I decided that converting it to VB, so I could place it directly in my application, was faster than modifying his sample into a component…

Anyway, explanations aside; here is the code in VB
Imports System
Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class InfiniteProgress
Inherits System.Windows.Forms.Control
Dim WithEvents tmr As Timer
Dim m_Color1 As Color = Color.White
Dim m_Color2 As Color = Color.Blue
Dim m_Increment As Integer = 5
<ComponentModel.Category("Appearance")> _
Public Property Color1() As Color
Get
Return m_Color1
End Get
Set(ByVal Value As Color)
m_Color1 = Value
End Set
End Property
<ComponentModel.Category("Appearance")> _
Public Property Color2() As Color
Get
Return m_Color2
End Get
Set(ByVal Value As Color)
m_Color2 = Value
End Set
End Property
<ComponentModel.Category("Appearance")> _
Public Property Increment() As Integer
Get
Return m_Increment
End Get
Set(ByVal Value As Integer)
m_Increment = Value
End Set
End Property
Dim Position As Single = 0
Public Sub New()
Me.SetStyle(ControlStyles.DoubleBuffer, True)
End Sub
Protected Overrides Sub OnPaint( _
ByVal e As System.Windows.Forms.PaintEventArgs)
Dim b As New LinearGradientBrush( _
Me.Bounds, Me.Color1, Me.Color2, _
LinearGradientMode.Horizontal)
b.WrapMode = Drawing.Drawing2D.WrapMode.TileFlipX
b.TranslateTransform(Position, 0, MatrixOrder.Append)
e.Graphics.FillRectangle(b, 0, 0, Me.Width, Me.Height)
b.Dispose()
MyBase.OnPaint(e)
End Sub
Private Sub tmr_Tick(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles tmr.Tick
Position += m_Increment
If Position > Me.Width Then
Position = -Me.Width
End If
Me.Invalidate()
End Sub
Protected Overrides Sub _
OnVisibleChanged(ByVal e As System.EventArgs)
If Me.Visible Then
If tmr Is Nothing Then
tmr = New Timer()
tmr.Interval = 20
End If
tmr.Start()
Else
If Not tmr Is Nothing Then
tmr.Stop()
End If
End If
MyBase.OnVisibleChanged(e)
End Sub
End Class
Thoughts on this post? Feel free to reach out on Bluesky!