如何在调用和事件VB.net时传递其他参数

时间:2013-03-10 09:09:26

标签: vb.net event-handling

Public Event DocumentCompleted As WebBrowserDocumentCompletedEventHandler

Dim arg() As Object = {homeTeam, guestTeam}
        AddHandler browser.DocumentCompleted, New 
WebBrowserDocumentCompletedEventHandler(AddressOf DoStuff)

Private Sub DoStuff(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)

End Sub

如何在触发DocumentCompleted事件时传递homeTeam和guestTeam。 我想将上面的值添加到Dostuff方法中。

请帮忙。

1 个答案:

答案 0 :(得分:1)

首先,你不能把它挂在不知名的地方:

Dim arg() As Object = {homeTeam, guestTeam}
AddHandler browser.DocumentCompleted,
           New WebBrowserDocumentCompletedEventHandler(AddressOf DoStuff)

AddHandler可能需要使用某种Initialize方法,该方法可以位于Sub New内,InitializeComponent之后,Form_Load内,或者你希望它被触发(在特定事件之后)。请注意,您使用的是本机.NET组件的默认事件,具有默认事件类型。在这种情况下,触发时,您不能直接使用除已提供的内容之外的任何内容。请参阅WebBrowser.DocumentCompleted Event on MSDN

但是,您可以覆盖所有相关的类,并拥有自己的MyWebBrowser控件和您自己的事件,并包含其他属性。见下面的例子:

Public Class Form1
  Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    Dim browser As New MyWebBrowser
    AddHandler browser.MyDocumentCompleted, AddressOf DoStuff
  End Sub

  Private Sub DoStuff(ByVal sender As Object, ByVal e As MyWebBrowserDocumentCompletedArgs)
    Dim guestTeam As String = e.GuestTeam 'guest team
    Dim homeTeam As String = e.HomeTeam 'and home team are both accessible
    'so you can do some processing on them
  End Sub

  Public Class MyWebBrowserDocumentCompletedArgs : Inherits WebBrowserDocumentCompletedEventArgs
    Dim _homeTeam As String
    Dim _guestTeam As String
    Public ReadOnly Property HomeTeam
      Get
        Return _homeTeam
      End Get
    End Property
    Public ReadOnly Property GuestTeam
      Get
        Return _guestTeam
      End Get
    End Property

    Sub New(url As Uri, homeTeam As String, guestTeam As String)
      MyBase.New(url)
      _homeTeam = homeTeam
      _guestTeam = guestTeam
    End Sub
  End Class

  Public Class MyWebBrowser : Inherits WebBrowser
    Public Delegate Sub MyWebBrowserDocumentCompletedEventHandler(e As MyWebBrowserDocumentCompletedArgs)
    Public Event MyDocumentCompleted As MyWebBrowserDocumentCompletedEventHandler

    Protected Overrides Sub OnDocumentCompleted(e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
      MyBase.OnDocumentCompleted(e)
      'homeTeam and guestTeam need to be extracted from the current instance of MyWebBrowser, and passed further
      RaiseEvent MyDocumentCompleted(New MyWebBrowserDocumentCompletedArgs(e.Url, "homeTeam", "guestTeam"))
    End Sub
  End Class
End Class

如果您的项目相对较小,您确实可以将这些作为全局变量,正如@Vlad在评论中所建议的那样。