VB.net 调用和事件时如何传递附加参数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15320634/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-17 12:42:29  来源:igfitidea点击:

How to Pass Additional Parameters When Calling and Event VB.net

vb.netevent-handling

提问by sachinthana87

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

How can I pass the homeTeam and guestTeam when firing the DocumentCompleted event. I want to ge the above to values to inside the Dostuff method.

触发 DocumentCompleted 事件时如何传递 homeTeam 和 guestTeam。我想将上面的值转换为 Dostuff 方法内部的值。

Please help.

请帮忙。

采纳答案by Neolisk

First of all, you cannot have this hanging in the middle of nowhere:

首先,你不能把这个挂在偏僻的地方:

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

AddHandlerprobably needs to be in some Initializemethod, which could be inside Sub New, after InitializeComponent, or inside Form_Load, or as soon as you expect it to be triggered (after a specific event). Notice here that you are using a default event of a native .NET component, with a default event type. In this case you cannot directly consume anything other than what it already provides, when triggered. See WebBrowser.DocumentCompleted Event on MSDN.

AddHandler可能需要在某种Initialize方法中,可以是 inside Sub New、 afterInitializeComponent或 inside Form_Load,或者只要您期望它被触发(在特定事件之后)。请注意,您使用的是本机 .NET 组件的默认事件,具有默认事件类型。在这种情况下,您不能在触发时直接使用除了它已经提供的东西之外的任何东西。请参阅MSDN 上的 WebBrowser.DocumentCompleted 事件

You can, however, override all relevant classes and have your own MyWebBrowser control and your own event, with would contain additional properties. See below example:

但是,您可以覆盖所有相关类并拥有自己的 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

If your project is relatively small, you can indeed have those as global variables, as @Vlad suggested in the comments.

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