Subclassing in .NET

From HashVB
Revision as of 10:53, 5 January 2006 by Adiall (Talk | contribs)

Jump to: navigation, search

'General class to subclass any window (control,form..etc)

Public Class SubclassWindow

       Inherits NativeWindow
       Dim m_Msg As Integer = -1
       Dim bCatchMsg As Boolean = False
       Public Event OnProcessMessage(ByRef m As System.Windows.Forms.Message)
       Public Property CatchMessage() As Integer
           Get
               Return m_Msg
           End Get
           Set(ByVal Value As Integer)
               m_Msg = Value
               bCatchMsg = True
           End Set
       End Property
       Protected Overloads Overrides Sub WndProc(ByRef m As Message)
           If bCatchMsg AndAlso m.Msg = m_Msg Then
               RaiseEvent OnProcessMessage(m)
               If Not m.Result.Equals(IntPtr.Zero) Then
                   Return
               End If
           End If
           MyBase.WndProc(m)
       End Sub

End Class

'### Example How to use it #####' 'declare Dim withevents oSubclassTest as SubclassWindow

'then put the code in InitializeComponent or where you need oSubclassTest = New SubclassWindow With oSubclassCalendar

.CatchMessage = WM_LBUTTONDOWN  ' or other message
.AssignHandle(textbox1.Handle) ' or any control/form..etc

End With

'then catch the specific message within OnProcessMessage event Private Sub SubclassWindow_OnProcessMessage(ByRef m As System.Windows.Forms.Message) Handles oSubclassTest.OnProcessMessage

       'insert your code here (processing...etc)
       '''''''''
       'to stop the message,set Result property: 
       m.Result = New IntPtr(1)

End Sub