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