【问题标题】:Need to pass object through dynamically created event handler需要通过动态创建的事件处理程序传递对象
【发布时间】:2015-12-16 09:45:03
【问题描述】:

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

AddHandler newperson.MouseUp, AddressOf newperson_MouseUp

然后我使用这个处理程序如下,

Private Sub newperson_MouseUp()

End sub

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

newperson.Background = Brushes.Black

任何意见或想法将不胜感激:)。

【问题讨论】:

    标签: vb.net event-handling eventhandler


    【解决方案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 也具有默认事件参数,但这不是必须的。

    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. 处理程序(这里只是主窗体)现在使用自定义事件参数注册到新的自定义事件。因此您可以访问 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
      

    希望对您有所帮助。代码未经测试,因此不提供任何保证;)

    【讨论】:

    • 几乎立即工作,除了一些非常微小的错误,感谢大量帮助:)
    猜你喜欢
    • 1970-01-01
    • 2016-02-04
    • 2016-09-23
    • 2014-08-28
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多