需要通过动态创建的事件处理程序传递对象

时间:2015-12-16 09:45:03

标签: vb.net event-handling eventhandler

需要在vb.net应用程序中通过动态创建的事件处理程序传递对象,(newperson是一个usercontrol)。事件处理程序:

AddHandler newperson.MouseUp, AddressOf newperson_MouseUp

然后我按如下方式使用此处理程序,

Private Sub newperson_MouseUp()

End sub

但是我需要引用这个子中的新人,例如

newperson.Background = Brushes.Black

任何意见或想法都将受到赞赏:)。

1 个答案:

答案 0 :(得分:1)

你需要三件事:

  1. 自定义EventArgs类,用于存储对newPerson对象的引用

    Public Class MyMouseUpEventArgs
        Inherits MouseEventArgs
    
    Public Sub New(newPerson As Person, b As MouseButtons, clicks As Integer, x As Integer, y As Integer, Delta As Integer)
        MyBase.New(b, clicks, x, y, Delta)
        Me.newPerson = newPerson
    End Sub
    
    Public Property newPerson As Person
    End Class
    

    它继承自MouseEventArgs也具有默认事件args,但这不是必须的。

  2. 在自定义控件中,您需要处理原始MouseUp事件。在这个处理程序中,您只需引发一个名为MyMouseUp的新自定义事件。此自定义事件将先前创建的MyMouseEventArgs与新人

    作为参数
    Public Class Person
           Inherits UserControl
    
    Public Shared Event MyMouseUp(sender As Object, e As MyMouseUpEventArgs)
    
    Public Sub New()
        AddHandler Me.MouseUp, AddressOf OnMouseUp
    End Sub
    
    Private Overloads Sub OnMouseUp(sender As Object, e As MouseEventArgs)
        RaiseEvent MyMouseUp(sender, New MyMouseUpEventArgs(Me, e.Button, e.Clicks, e.X, e.Y, e.Delta))
    End Sub
    End Class
    

    必须共享自定义事件,以便可以在处理程序类中使用它,而不会在步骤

  3. 中显示对象引用
  4. 处理程序(此处只是主窗体)现在使用自定义事件args注册到新的自定义事件。因此,您可以访问newPerson。

    Public Class Form1
    
    Public Sub New()
        InitializeComponent()
    
        AddHandler Person.MyMouseUp, AddressOf OnyMyMouseUp
    End Sub
    
    Private Overloads Sub OnyMyMouseUp(sender As Object, e As MyMouseUpEventArgs)
        'Do stuff
        e.newPerson.BackColor = Color.Aqua
    End Sub
    End Class
    
  5. 希望有所帮助。代码未经过测试,因此不提供保修;)

相关问题