如何在Vb.net中通过单击面板的控件来引发面板的单击事件

如何在Vb.net中通过单击面板的控件来引发面板的单击事件,vb.net,Vb.net,我有一个自定义的TableLayoutPanel: Public Class CustomTLP Inherits TableLayoutPanel Private labelText As Label = New Label() Public Sub New([variousParam]) [...] labelText.Text = "Hello Dolly!" Me.Controls.Add

我有一个自定义的TableLayoutPanel:

Public Class CustomTLP
    Inherits TableLayoutPanel

    Private labelText As Label = New Label()

    Public Sub New([variousParam])

        [...]

        labelText.Text = "Hello Dolly!"
        Me.Controls.Add(labelText, 0, 0)

    End Sub
End Class
在另一个类中,我创建了一个新的CustomTLP及其鼠标单击处理程序

Dim w As CustomTLP = New CustomTLP (Me, dName)
aFlowLayout.Controls.Add(w)
AddHandler w.MouseClick, AddressOf Me.ABeautifulOperation
问题是,当我单击CustomTLP标签时,处理程序没有检测到事件。 我想到的唯一解决方案是将
abeautifulooperation
设置为public并从标签单击处理程序调用它,但我认为这不是一个优雅的解决方案。。。是否有方法引发面板的clickevent?类似这样的内容(在CustomTLP中):


正如GSerg所建议的,单击标签时只需调用base OnClick()方法:

Private Sub labelClicked(sender As Object, e As EventArgs)
    Me.OnClick(e)
End Sub
以下是的VB版本,它将忽略鼠标事件,从而允许父控件处理它们:

Public Class CustomLabel
    Inherits Label

    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_NCHITTEST As Integer = &H84
        Const HTTRANSPARENT As Integer = (-1)

        If m.Msg = WM_NCHITTEST Then
            m.Result = New IntPtr(HTTRANSPARENT)
        Else
            MyBase.WndProc(m)
        End If
    End Sub

End Class

?@gserg非常感谢你!我更改了
w。鼠标单击
w中的
。单击
Me。OnClick(e)
工作正常!对我还必须更改
w。鼠标单击
w中的
。单击
,您也可以导出忽略鼠标的自己的,然后所有事件将直接传递到父级(TableLayoutPanel)。但是,您将无法捕获标签本身的鼠标事件。在你的情况下可能会有帮助,谁知道。。。
Public Class CustomLabel
    Inherits Label

    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_NCHITTEST As Integer = &H84
        Const HTTRANSPARENT As Integer = (-1)

        If m.Msg = WM_NCHITTEST Then
            m.Result = New IntPtr(HTTRANSPARENT)
        Else
            MyBase.WndProc(m)
        End If
    End Sub

End Class