Difference between revisions of "Subclassing in .NET"

From HashVB
Jump to: navigation, search
m (Reverted edit of JekYuj, changed back to last version by Dee)
m (Reverted edit of OloerGetva, changed back to last version by Dee)
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{For VB6|subclassing|Subclassing}}
  'General class to subclass any window (control,form..etc)
  'General class to subclass any window (control,form..etc)
  Public Class SubclassWindow
  Public Class SubclassWindow

Latest revision as of 16:06, 18 July 2008

 This article is based on Visual Basic.NET. Find other Visual Basic.NET articles.
 For information on subclassing in Visual Basic 6, see Subclassing.
'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
                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
                End If
            End If
        End Sub
End Class

'###  Example How to use it #####'
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