Imports System.Windows.Forms

Public Class TimedButton
    Inherits Button

    Private intSpan As Integer
    Private thrSpanExpired As New Threading.Thread(AddressOf SpanExpired)
    Private strButtonText As String = Me.Text
    Public Event TimerExpired As EventHandler

    Public Property Span() As Integer
        Get
            Return intSpan
        End Get
        Set(ByVal Value As Integer)
            If Value < 0 Then
                intSpan = 0
            Else
                intSpan = Value
            End If
        End Set
    End Property

    Private Sub SpanExpired()
        While True
            If intSpan = 0 Then
                RaiseEvent TimerExpired(Me, New System.EventArgs)
                thrSpanExpired.Abort()
                Exit Sub
            Else
                intSpan -= 1
                Me.Text = strButtonText & " (" & intSpan & ")"
                thrSpanExpired.Sleep(1000)
            End If
        End While
    End Sub

    Public Sub StartCount()
        If thrSpanExpired.ThreadState <> Threading.ThreadState.Stopped Then
            thrSpanExpired = New Threading.Thread(AddressOf SpanExpired)
            thrSpanExpired.Start()
        Else
            Throw New Exception("Could not change Time Span. Thread already running")
        End If
    End Sub

    Public Sub StartCount(ByVal intSpan As Integer)
        Me.Span = intSpan
        thrSpanExpired.Start()
    End Sub

End Class
