AddressOf带参数

nat*_*tli 13 vb.net

我需要将groupID(和另一个整数)链接到我动态添加的按钮..任何想法?

我可以做什么;

AddHandler mybutton.Click, AddressOf PrintMessage

Private Sub PrintMessage(ByVal sender As System.Object, ByVal e As System.EventArgs)
    MessageBox.Show("Dynamic event happened!")
End Sub
Run Code Online (Sandbox Code Playgroud)

我不能做什么,但想要;

AddHandler mybutton.Click, AddressOf PrintMessage(groupID)

Private Sub PrintMessage(ByVal groupID as Integer)
    MessageBox.Show("Dynamic event happened!" & groupID .tostring)
End Sub
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 37

没有办法自己做这件事AddressOf.你要找的是一个lambda表达式.

AddHandler myButton.Click, Function(sender, e) PrintMessage(groupId)

Private Sub PrintMessage(ByVal groupID as Integer)
    MessageBox.Show("Dynamic event happened!" & groupID .tostring)
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 我用上面所示的 Sub 进行了尝试,并在 .NET 3.5 中收到了编译错误:“表达式不产生值”。当将我的委托设置为始终返回 true 的函数时,它起作用了。为什么?? (2认同)
  • 稍后如何为此事件处理程序调用`RemoveHandler`? (2认同)

Oli*_*bes 5

您可以创建自己的按钮类并向其中添加任何您想要的内容

Public Class MyButton
    Inherits Button

    Private _groupID As Integer
    Public Property GroupID() As Integer
        Get
            Return _groupID
        End Get
        Set(ByVal value As Integer)
            _groupID = value
        End Set
    End Property

    Private _anotherInteger As Integer
    Public Property AnotherInteger() As Integer
        Get
            Return _anotherInteger
        End Get
        Set(ByVal value As Integer)
            _anotherInteger = value
        End Set
    End Property

End Class
Run Code Online (Sandbox Code Playgroud)

从 VB 2010 开始你可以简单地写

Public Class MyButton
    Inherits Button

    Public Property GroupID As Integer

    Public Property AnotherInteger As Integer
End Class
Run Code Online (Sandbox Code Playgroud)

您可以通过投射来访问该按钮sender

Private Sub PrintMessage(ByVal sender As Object, ByVal e As EventArgs)
    Dim btn = DirectCast(sender, MyButton)
    MessageBox.Show( _
      String.Format("GroupID = {0}, AnotherInteger = {1}", _
                    btn.GroupID, btn.AnotherInteger))
End Sub
Run Code Online (Sandbox Code Playgroud)

这些新属性甚至可以在属性窗口(在 下)中设置Misc

当前项目中定义的控件会自动出现在工具箱中。