自定义控件,将控制事件传递给父级

时间:2015-08-04 18:13:22

标签: vb.net

我正在尝试将鼠标控件的事件传递给其父控件。我有我的控制,其中有一个面板,然后是面板上的3个控件。这是在运行时添加到流布局面板的自定义控件。

我可以通过使用添加处理程序通过主代码访问面板,但每次我单击该面板上的一个控件时,我都希望通过鼠标向上传递事件,以便触发面板事件。

Public Class Repeater

Public Event RepeaterMouseUp As MouseEventHandler

Private Sub on_Mouse_Up(ByVal sender As Object, ByVal e As MouseEventArgs) 'Handles TextBox1.onclick
    RaiseEvent RepeaterMouseUp(sender, e)
End Sub

Private Sub Repeater_Load(sender As Object, e As EventArgs) Handles Me.Load
    AddHandler lblRecName.MouseUp, AddressOf on_Mouse_Up
    AddHandler lblNote.MouseUp, AddressOf on_Mouse_Up
    AddHandler strRating.MouseUp, AddressOf on_Mouse_Up
End Sub

Private Sub lblNote_MouseUp(sender As Object, e As MouseEventArgs) Handles lblNote.MouseUp
    RaiseEvent RepeaterMouseUp(sender, e)
End Sub

Private Sub Panel1_MouseUp(sender As Object, e As MouseEventArgs) Handles Panel1.MouseUp
    RaiseEvent RepeaterMouseUp(sender, e)
End Sub

End Class

我似乎无法找到将鼠标事件传递给父控件的任何可用示例。我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在评论的帮助下,我想出了一种方法。为我的主窗体上的所有子控件创建的添加处理程序甚至没有触及UserControl:

AddHandler rptr.lblRecName.MouseUp, AddressOf Child_MouseUp
AddHandler rptr.lblNote.MouseUp, AddressOf Child_MouseUp
AddHandler rptr.strRating.MouseUp, AddressOf Child_MouseUp

当我在我的主窗体上单击我的面板时,在另一个子窗格中,我设置了父控件,即Repeater UserControl,backcolor为黑色,看起来像一个选择,并使用基于控件lblRecName的东西填充数据网格。文本。

Private Sub Child_MouseUp(ByVal sender As System.Object, ByVal e As MouseEventArgs)

    Dim ctl As Control = sender

    flpControl_Click(ctl.Parent, e)

End Sub
TBH,这似乎是处理这个问题的一种黑客方式,但它确实有效。谢谢你们!