如何在Vb.net中通过单击面板的控件来引发面板的单击事件
我有一个自定义的TableLayoutPanel:如何在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
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