如何使用VB.NET中的接口处理事件?
我不熟悉接口,我正在努力了解它们是如何工作的 我编写了以下代码,除了没有触发的click事件外,这些代码正常工作如何使用VB.NET中的接口处理事件?,vb.net,interface,Vb.net,Interface,我不熟悉接口,我正在努力了解它们是如何工作的 我编写了以下代码,除了没有触发的click事件外,这些代码正常工作 Public Class Form1 Dim WithEvents Button As IClass = New MyButton Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button.
Public Class Form1
Dim WithEvents Button As IClass = New MyButton
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button.Parent = Me
End Sub
Public Sub ClickEventHandler(ByVal Sender As Object, ByVal E As EventArgs) Handles Button.Click
MsgBox("Piwpiw !")
End Sub
End Class
Public Interface IClass
Event Click(ByVal Sender As Object, ByVal E As EventArgs)
Property Parent
End Interface
Public Class MyButton
Inherits SimpleButton
Implements IClass
Public Event click1(ByVal Sender As Object, ByVal E As System.EventArgs) Implements IClass.click
Public Property Parent1 As Object Implements IClass.Parent
Get
Return MyBase.Parent
End Get
Set(ByVal value As Object)
MyBase.Parent = value
End Set
End Property
End Class
那代码怎么了
(注:这只是一个让我理解接口如何工作的示例,没有任何功能意义。)在您的示例代码中,我没有看到引发事件的行。为了能够在事件处理程序中处理事件,MyButton类中有一个引发事件的点,即:
Public Class MyButton
Inherits SimpleButton
Implements IClass
Public Event click1(ByVal Sender As Object, ByVal E As System.EventArgs) Implements IClass.click
Public Property Parent1 As Object Implements IClass.Parent
Get
Return MyBase.Parent
End Get
Set(ByVal value As Object)
MyBase.Parent = value
End Set
End Property
Public Sub SimulateClick()
RaiseEvent click1(Me, New System.EventArgs())
End Sub
End Class
您可以使用该语句引发事件。当然,上面的示例假设在代码中的某个时刻,您调用SimulateClick而不是真正的鼠标单击(这将涉及绘制按钮并对几个鼠标事件作出反应)。一旦引发事件,将调用处理程序。您可以通过Form1\u加载方法执行此操作:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button.Parent = Me
Button.SimulateClick()
End Sub
我注意到您的MyButton
类派生自SimpleButton
类。除了使用SimulateClick方法之外,您还可以对SimpleButton
类中的单击作出反应,并将RaiseEvent
语句放在那里。以下是解决方案:
将MyButton类替换为:
Public Class MyButton
Inherits SimpleButton
Implements IClass
Public Shadows Event click(ByVal Sender As Object, ByVal E As System.EventArgs) Implements IClass.Click
Public Property Parent1 As Object Implements IClass.Parent
Get
Return MyBase.Parent
End Get
Set(ByVal value As Object)
MyBase.Parent = value
End Set
End Property
Public Sub ClickEventHandler(ByVal Sender As Object, ByVal E As EventArgs) Handles MyBase.Click
RaiseEvent click(Sender, E)
End Sub
End Class
在
MyButton
类中缺少一个方法来实现此功能
你需要这个:
Private Sub MyButton_Click(sender As Object, e As System.EventArgs) Handles Me.Click
RaiseEvent click1(sender, e)
End Sub
本质上,
SimpleButton
已经有了一个click方法。当您单击派生的MyButton
类时,它将被引发。但是SimpleButton
上的Click
事件与IClass
界面上的Click
事件不同。您将其实现为单击1
。因此,当提升Click
方法时,您只需要提升click1
方法。因此采用了上述方法。好吧,这就是我的问题:假设一个类有自己的事件,并根据自己的逻辑触发,如何分配一个接口并通过接口捕获这些事件?MyButton类实际上是从SimpleButton类派生的。这没有什么意义,但只是一个简单的例子。我真正的代码非常复杂,这就是为什么我尝试用这几行代码来复制它。