Difference between revisions of "Subclassing in .NET"
From HashVB
m (Reverted edit of OloerGetva, changed back to last version by Dee) |
|||
(8 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | + | {{VB.NET}} | |
− | + | {{For VB6|subclassing|Subclassing}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | '### Example How to use it #####' | + | 'General class to subclass any window (control,form..etc) |
− | 'declare | + | Public Class SubclassWindow |
− | Dim withevents oSubclassTest as 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 | + | 'then put the code in InitializeComponent or where you need |
− | oSubclassTest = New SubclassWindow | + | oSubclassTest = New SubclassWindow |
− | With oSubclassCalendar | + | With oSubclassCalendar |
− | + | .CatchMessage = WM_LBUTTONDOWN ' or other message | |
− | + | .AssignHandle(textbox1.Handle) ' or any control/form..etc | |
− | End With | + | End With |
− | + | ||
− | 'then catch the specific message within OnProcessMessage event | + | 'then catch the specific message within OnProcessMessage event |
− | Private Sub SubclassWindow_OnProcessMessage(ByRef m As System.Windows.Forms.Message) Handles oSubclassTest.OnProcessMessage | + | 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 | + | End Sub |
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 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