在 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"))
我有一个场景,我必须实现一个 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"))