Option Explicit On
Option Strict On
Imports System.ComponentModel
Public Class myButton
Inherits Windows.Forms.Button
#Region " Variables "
Private m_PressedImage As Image
Private m_TempSwapImage As Image
Private m_TempDisabledImage As Image
Private m_UseImageSwap As Boolean
Private m_ImageSwapped As Boolean
Private m_DisabledImage As Image
#End Region
#Region " Events "
Public Event DisabledImageChanged As EventHandler
Public Event PressedImageChanged As EventHandler
Public Event UseImageSwapChanged As EventHandler
#End Region
#Region " Sub New "
Public Sub New()
MyBase.New()
Me.m_PressedImage = Nothing
Me.m_TempSwapImage = Nothing
Me.m_DisabledImage = Nothing
Me.m_TempDisabledImage = Nothing
Me.m_UseImageSwap = True
Me.m_ImageSwapped = False
End Sub
#End Region
#Region " Properties: PressedImage, UseImageSwap "
<DefaultValue(GetType(Boolean), ""), Description("Image displayed on the control when the control's disabled"), Category("Appearance")> _
Public Property DisabledImage() As Image
Get
Return Me.m_DisabledImage
End Get
Set(ByVal value As Image)
If Me.m_DisabledImage Is Nothing Then
Me.m_DisabledImage = value
Me.OnDisabledImageChanged(EventArgs.Empty)
Else
If Me.m_DisabledImage.Equals(value) = False Then
Me.m_DisabledImage = value
Me.OnDisabledImageChanged(EventArgs.Empty)
End If
End If
End Set
End Property
<DefaultValue(GetType(Boolean), ""), Description("Image displayed on the control when the MouseDown event fires"), Category("Appearance")> _
Public Property PressedImage() As Image
Get
Return Me.m_PressedImage
End Get
Set(ByVal value As Image)
If Me.m_PressedImage Is Nothing Then
Me.m_PressedImage = value
Me.OnPressedImageChanged(EventArgs.Empty)
Else
If Me.m_PressedImage.Equals(value) = False Then
Me.m_PressedImage = value
Me.OnPressedImageChanged(EventArgs.Empty)
End If
End If
End Set
End Property
<DefaultValue(GetType(Boolean), "True"), Description("Determines whether the two image's will be swapped on the MouseDown event"), Category("Appearance")> _
Public Property UseImageSwap() As Boolean
Get
Return Me.m_UseImageSwap
End Get
Set(ByVal value As Boolean)
If Me.m_UseImageSwap <> value Then
Me.m_UseImageSwap = value
Me.OnUseImageSwapChanged(EventArgs.Empty)
End If
End Set
End Property
#End Region
#Region " Overridable Subs: OnDisabledImageChanged, OnPressedImageChanged, OnUseImageSwapChanged "
Protected Overridable Sub OnDisabledImageChanged(ByVal e As EventArgs)
RaiseEvent DisabledImageChanged(Me, e)
End Sub
Protected Overridable Sub OnPressedImageChanged(ByVal e As EventArgs)
RaiseEvent PressedImageChanged(Me, e)
End Sub
Protected Overridable Sub OnUseImageSwapChanged(ByVal e As EventArgs)
RaiseEvent UseImageSwapChanged(Me, e)
End Sub
#End Region
#Region " Overrides Subs: OnMouseDown, OnMouseUp "
Protected Overrides Sub OnMouseDown(ByVal mevent As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseDown(mevent)
SwapImages(True)
End Sub
Protected Overrides Sub OnMouseUp(ByVal mevent As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseUp(mevent)
SwapImages(False)
End Sub
#End Region
#Region " Overrides Subs: OnKeyDown, OnKeyUp "
Protected Overrides Sub OnKeyDown(ByVal kevent As System.Windows.Forms.KeyEventArgs)
MyBase.OnKeyDown(kevent)
If kevent.KeyCode = Keys.Space Then SwapImages(True)
End Sub
Protected Overrides Sub OnKeyUp(ByVal kevent As System.Windows.Forms.KeyEventArgs)
MyBase.OnKeyUp(kevent)
If kevent.KeyCode = Keys.Space Then SwapImages(False)
End Sub
#End Region
#Region " OnEnabledChanged "
Protected Overrides Sub OnEnabledChanged(ByVal e As System.EventArgs)
MyBase.OnEnabledChanged(e)
If DesignMode = False AndAlso Me.m_DisabledImage IsNot Nothing Then
If Me.Enabled = False Then
Me.m_TempDisabledImage = Me.Image
Me.Image = Me.m_DisabledImage
Else
Me.Image = Me.m_TempDisabledImage
Me.m_TempDisabledImage = Nothing
End If
End If
End Sub
#End Region
#Region " SwapImages "
Private Sub SwapImages(ByVal ButtonPressed As Boolean)
If Me.m_UseImageSwap = True Then
If ButtonPressed = True Then
If Me.m_ImageSwapped = False Then
Me.m_ImageSwapped = True
Me.m_TempSwapImage = Me.Image
Me.Image = Me.m_PressedImage
End If
Else
Me.m_ImageSwapped = False
Me.Image = Me.m_TempSwapImage
Me.m_TempSwapImage = Nothing
End If
End If
End Sub
#End Region
End Class