引发继承基础 Class 的事件自定义控件 Class
Raise Events Custom Control Class which Inherits Base Class
我正在尝试为 axShockwaveFlash 控件设计 "pass-through"。此控件没有与之关联的 .MouseDown
、.MouseUp
或 .MouseMove
事件。遗憾的是,我需要在任何冲击波控件上检测这些事件,因为它们在另一个 class 中使用(它在各种不同的控件上检测这些事件)。
因此,我尝试设计自定义 class,修改 axShockwaveFlash class 以包含这些事件。但是,我收到以下错误:
"Derived classes cannot raise base class events."
在线:
RaiseEvent MouseDown(Me, EventArgs.Empty)
完整代码(减去向上和移动功能):
Imports System.Runtime.InteropServices
Imports System.Threading
Public Class MousedFlash
Inherits AxShockwaveFlashObjects.AxShockwaveFlash
'WndProc Inputs:
Private Const WM_RBUTTONDOWN As Integer = &H204
Private Const WM_LBUTTONDOWN As Integer = &H201
Protected Overloads Sub OnMouseDown()
RaiseEvent MouseDown(Me, EventArgs.Empty)
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case WM_RBUTTONDOWN
Debug.WriteLine("MOUSE FLASH - right down!")
Call OnMouseDown()
Return
Case WM_LBUTTONDOWN
Debug.WriteLine("MOUSE FLASH - left down!")
Call OnMouseDown()
Return
End Select
MyBase.WndProc(m)
End Sub
End Class
我认为基础 Class 是 AxShockwaveFlashObjects
- 但我看不到此处定义的鼠标事件。深入了解这一点 - 任何帮助表示赞赏。
看看 this page 它看起来像而不是尝试引发基本 class 事件,您应该调用直接处理该事件的 Sub。所以尝试替换
Protected Overloads Sub OnMouseDown()
RaiseEvent MouseDown(Me, EventArgs.Empty)
End Sub
和
Protected Overloads Sub OnMouseDown()
MyBase.MouseDown(Me, EventArgs.Empty)
End Sub
谢谢。最后,我的粗心大意和错误的超越类型混合在一起。最终工作替换:
Shadows Event MouseDown As System.EventHandler
Protected Overridable Sub OnMouseDownTrigger()
RaiseEvent MouseDown(Me, EventArgs.Empty)
End Sub
我正在尝试为 axShockwaveFlash 控件设计 "pass-through"。此控件没有与之关联的 .MouseDown
、.MouseUp
或 .MouseMove
事件。遗憾的是,我需要在任何冲击波控件上检测这些事件,因为它们在另一个 class 中使用(它在各种不同的控件上检测这些事件)。
因此,我尝试设计自定义 class,修改 axShockwaveFlash class 以包含这些事件。但是,我收到以下错误:
"Derived classes cannot raise base class events."
在线:
RaiseEvent MouseDown(Me, EventArgs.Empty)
完整代码(减去向上和移动功能):
Imports System.Runtime.InteropServices
Imports System.Threading
Public Class MousedFlash
Inherits AxShockwaveFlashObjects.AxShockwaveFlash
'WndProc Inputs:
Private Const WM_RBUTTONDOWN As Integer = &H204
Private Const WM_LBUTTONDOWN As Integer = &H201
Protected Overloads Sub OnMouseDown()
RaiseEvent MouseDown(Me, EventArgs.Empty)
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case WM_RBUTTONDOWN
Debug.WriteLine("MOUSE FLASH - right down!")
Call OnMouseDown()
Return
Case WM_LBUTTONDOWN
Debug.WriteLine("MOUSE FLASH - left down!")
Call OnMouseDown()
Return
End Select
MyBase.WndProc(m)
End Sub
End Class
我认为基础 Class 是 AxShockwaveFlashObjects
- 但我看不到此处定义的鼠标事件。深入了解这一点 - 任何帮助表示赞赏。
看看 this page 它看起来像而不是尝试引发基本 class 事件,您应该调用直接处理该事件的 Sub。所以尝试替换
Protected Overloads Sub OnMouseDown()
RaiseEvent MouseDown(Me, EventArgs.Empty)
End Sub
和
Protected Overloads Sub OnMouseDown()
MyBase.MouseDown(Me, EventArgs.Empty)
End Sub
谢谢。最后,我的粗心大意和错误的超越类型混合在一起。最终工作替换:
Shadows Event MouseDown As System.EventHandler
Protected Overridable Sub OnMouseDownTrigger()
RaiseEvent MouseDown(Me, EventArgs.Empty)
End Sub