设置继承事件的正确方法是什么

时间:2009-08-14 00:05:20

标签: .net event-handling delegates

通常我会设置这样的事件......

Public Delegate Sub MySpecialEventHandler(sender as object, e as mySpecialEventEventArgs)  '  ...I will not show the implementation of mySpecialEventArgs.
Public Event MySpecialEvent as MySpecialEventHandler  

Private Sub OnMySpecialEvent(newStatus as string)  
     Raise Event MySpecialEvent(Me,New mySpecialEventEventArgs(newStatus))  
End Sub  

我有一个界面......看起来像这样......

Public Interface IWizardUserControl
    ReadOnly Property ShowNavigatePrevious() As Boolean
    ReadOnly Property ShowNavigateNext() As Boolean
    ReadOnly Property ShowNavigateFinish() As Boolean
    ReadOnly Property ShowNavigateCancel() As Boolean
    ReadOnly Property Description() As String
    ReadOnly Property StepCaption() As String
    ReadOnly Property PageImage() As System.Drawing.Image
    ReadOnly Property PageHelpText() As String
    Property IsValid() As Boolean
    Sub OnValidStatusChanged(ByVal validStatus As Boolean)
    Event ValidStatusChanged()
End Interface

我希望事件设置,例如您在上面的界面中实现的内容。

在界面中设置委托时。没有错误。但是当你尝试在userControl中实现委托时Visual Studio说“委托不能实现接口方法”

我的目标是有一个控制器类,它将派生类转换为接口,然后为interfaces事件添加一个处理程序。

任何帮助将不胜感激。提前谢谢。

编辑 - 我接受了John Saunders的建议并钻进了web.ui课程。这就是我所做的,它完美地运作。

在界面中我添加/更改了以下内容......

Sub OnValidStatusChanged(ByVal validStatus As Boolean)  
Sub ValidStatusChangedHandler(ByVal sender As Object, ByVal e AsValidStatusChangedEventArgs)  
Event ValidStatusChanged As EventHandler  

最相关的一点是我将ValidStatusChangedHandler声明为Sub而不是委托。

我在我的派生类中实现了以下内容......

Protected Event ValidStatusChanged As EventHandler Implements IWizardUserControl.ValidStatusChanged

Protected Sub ValidStatusChangedHandler(ByVal sender As Object, ByVal e As ValidStatusChangedEventArgs) Implements IWizardUserControl.ValidStatusChangedHandler
    OnValidStatusChanged(e.ValidStatus)
End Sub

Private Sub OnValidStatusChanged(ByVal status As Boolean) Implements IWizardUserControl.OnValidStatusChanged
    RaiseEvent ValidStatusChanged(Me, New ValidStatusChangedEventArgs(status))
End Sub

最后在控制器类中我正在做这个......

Dim iwp As IWizardUserControl = DirectCast(wizardUserControl, IWizardUserControl)
AddHandler iwp.ValidStatusChanged, AddressOf iwp.ValidStatusChangedHandler

像魅力一样。

赛斯

0 个答案:

没有答案