需要在vb.net应用程序中通过动态创建的事件处理程序传递对象,(newperson是一个usercontrol)。事件处理程序:
AddHandler newperson.MouseUp, AddressOf newperson_MouseUp
然后我按如下方式使用此处理程序,
Private Sub newperson_MouseUp()
End sub
但是我需要引用这个子中的新人,例如
newperson.Background = Brushes.Black
任何意见或想法都将受到赞赏:)。
答案 0 :(得分: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,但这不是必须的。
在自定义控件中,您需要处理原始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
必须共享自定义事件,以便可以在处理程序类中使用它,而不会在步骤
处理程序(此处只是主窗体)现在使用自定义事件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
希望有所帮助。代码未经过测试,因此不提供保修;)