在 VB.NET 自定义控件中添加事件处理程序

Adding Event Handler in VB.NET Custom Control

我有一个场景,我必须实现一个 UserControl,点击一个按钮 "Process" 后台工作人员工作。

我想触发我的父表单的 Function/Method,我将在 "RunWorkerCompleted" 事件中添加该 UserControl。

Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
    Try            
        bgwFetchGiftCard.RunWorkerAsync()
    Catch ex As Exception
        WriteLog(ex)
    End Try
End Sub

Private Sub bgwFetchCard_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwFetchCard.DoWork
    Try
        ds = New DataSet()
        'Call ApI Service for Denomination
        ds = APICALL()
    Catch ex As Exception
        WriteLog(ex)
    End Try
End Sub

Private Sub bgwFetchCard_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwFetchCard.RunWorkerCompleted
    If ds IsNot Nothing Then
        Result = True   
        'At This Point I Want To Raise Event          
        'RaiseEvent 
    Else
        'ShowMessage("FAIL")
    End If
End Sub

我怎样才能做到这一点?任何人都好心建议

假设显示的代码在 UserControl 中,您只需声明一个事件并引发它(关于 UserControl 没有什么特别之处):

Public Event SomethingIsDone (sender As Object, e as EventArgs)

...
Private Sub bgwFetchCard_RunWorkerCompleted(sender As Object, 
          e As RunWorkerCompletedEventArgs) Handles bgwFetchCard.RunWorkerCompleted
    If ds IsNot Nothing Then
        Result = True   

         RaiseEvent SomethingIsDone(Me, New EventsArgs()) 

    Else
        'ShowMessage("FAIL")
    End If
End Sub

如果您需要在事件中传递信息,请定义一个继承自 EventArgs 的自定义 EventArgs class 添加您需要的属性:

Public Class SomethingDoneEventArgs
    Inherits EventArgs

    Public Property SomethingName As String

    ' convenience:
    Public Sub New(name As String)
        SomethingName = name
    End Sub
End Class

然后传递 class 的实例而不是通用 EventArgs:

...
RaiseEvent SomethingIsDone(Me, 
           New SomethingDoneEventArgs("foo"))