我这里有点问题。我正在尝试将自有表格的事件转移/传递/提升给他的父母。让我们看看我的例子:
假设我有一个初始化CustomPanel的表单(只是一个继承自System.Windows.Forms.Panel的类)。它还有一个事件处理程序(它可能是另一个事件,不一定是单击事件):
Public Sub New()
Me.Size = New Size(1000,1000)
Dim pnl1 As New CustomPanel()
pnl1.Location = New Point(0,0)
pnl1.size = New Size(100,100)
Me.Controls.Add(pnl1)
End Sub
Private Sub form1_Click(sender As Object, e As EventArgs) Handles Me.Click
MsgBox("I got it!")
End Sub
我做了类似的事情,当我点击CustomPanel(pnl1)时,父容器(form1)没有收到点击事件......这是可以理解的。我试图查看CustomPanel(pnl1)的属性,如果我能找到一些有趣的东西,如“点击”或“将事件提升到父母”(我在这里绝望),但没有成功。我说没问题,我将处理我需要传递给CustomPanel类中父节点的事件,但我不能在这里找到解决方案:
Imports System.Windows.Forms
Public Class CustomPanel
Inherits Panel
Public Sub New()
End Sub
Private Sub CustomPanel_Click(sender As Object, e As EventArgs) Handles Me.Click
'What to put here?
'Me.Parent.?
End Sub
End Class
我只想知道是否有可能将事件抛出/引发/传递给父母。有一点是肯定的,它是我不应该的,我不能在父表单中添加任何其他内容。原因很简单,我可以在这个父表单中有超过100个控件,它们可以动态添加。最重要的是,这些控件也可以在内部拥有自己的控件!所以我可以有类似的东西:
pnl99 call parent click -> pnl98 call parent click -> ... until the parent of the control really handle the click event ... -> form1 perform click event
也许很难理解,但如果你能帮助我,我会很感激。
答案 0 :(得分:1)
使用自定义事件,拥有该面板的表单订阅。 Raise Event
Public Sub New()
Me.Size = New Size(1000,1000)
Dim pnl1 As New CustomPanel()
pnl1.Location = New Point(0,0)
pnl1.size = New Size(100,100)
Addhandler pnl1.MyClickEvent, AddressOf pl_Click
Me.Controls.Add(pnl1)
End Sub
Private Sub pl_Click()
MsgBox("I got it!")
End Sub
自定义面板:
Public Class CustomPanel
Inherits Panel
Public Event MyClickEvent
Private Sub CustomPanel_Click(sender As Object, e As EventArgs) Handles Me.Click
RaiseEvent MyClickEvent()
End Sub
End Class
答案 1 :(得分:0)
在儿童表格上
Imports System.Windows.Forms
Imports STAS_PLC_Link_Lib
Public Class ChildForm
Public Event MyClick()
'.....rest of code
在父表单上
Public Class ParentForm
Private Sub GetSomeClick() Handles ChildFor.MyClick
System.Console.WriteLine("test")
End Sub
end Class