【问题标题】:Custom control, pass control events to parent自定义控件,将控件事件传递给父级
【发布时间】:2015-08-04 18:13:22
【问题描述】:

我正在尝试将控件的鼠标向上事件传递到其父控件。我有我的控件,里面有一个面板,然后面板上有 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

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

【问题讨论】:

  • 您的自定义控件看起来更像一个用户控件。通常,UC 将处理大多数子控件事​​件,直到引发自定义事件以供表单使用。如果您需要表单了解控制事件,您需要将它们冒泡 - 在这些事件中,让 UC 引发表单可以订阅的事件。
  • 同意。但是,如果您不需要控件中的点击事件,那么您可以使用 Hans Passant 概述的方法make them transparent to clicks
  • 编辑已添加。 Plutonix 你是对的,它是一个用户控件。我总是忘记差异。尽管这两个 cmets 对我找到答案都有帮助。我实际上不需要控制点击事件来做任何事情,除了将点击传递给现在正在工作的父级。感谢您的帮助!
  • 请将您的解决方案发布为答案而不是问题更新,以便其他人可以从 Q/A 格式中受益。

标签: vb.net


【解决方案1】:

在 cmets 的帮助下,我想出了一个方法来做到这一点。为我的主窗体上的所有子控件创建了添加处理程序,甚至没有触及 UserControl:

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

当我的面板在我的主窗体上单击时,在另一个子窗体中,我正在设置父控件,即 Repeater UserControl,将背景颜色设置为黑色以看起来像一个选择,并使用基于控件 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,这似乎是处理此问题的一种 hacky 方式,但它确实有效。谢谢大家!

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多