Passing event to the parent form

荒凉一梦 提交于 2021-02-11 15:45:53

问题


I have a little problem here. I'm trying to transfer/pass/raise the events of an owned form to his parent. Lets look at my example:

Lets say i have a form that initialize a CustomPanel (simply a class that inherits from System.Windows.Forms.Panel). It also have an event handler (it could be an other event, not necessarily a click 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)
    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

I did something similar and when I clicked on the CustomPanel (pnl1) the parent container (form1) did not receive a click event ... which is understandable. I tried to look in the properties of the CustomPanel (pnl1) if i could find something interesting like "click through" or "raise event to parent" (I was desperate here) but without success. I said alright, I will handle the events that I need to pass to parent in the CustomPanel class but I cant find a solution here neither:

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

I just want to know if its possible to throw/raise/pass events to the parent. One thing is sure, its that i shouldn't have to and i cannot add anything else to the parent form. The reason is simple, i could have over 100 controls in this parent form and they could be added dynamically. And on top of that, these controls could also have their own controls inside! So i could have something like:

pnl99 call parent click -> pnl98 call parent click -> ... until the parent of the control really handle the click event ... -> form1 perform click event

Maybe its hard to understand but if you can help me I would appreciate.


回答1:


Using a custom event, that the form owning the panel subscribes to. 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

Custom panel:

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



回答2:


On the child form

Imports System.Windows.Forms
Imports STAS_PLC_Link_Lib

Public Class ChildForm

    Public Event MyClick()
'.....rest of code

On the parent form

Public Class ParentForm

Private Sub GetSomeClick() Handles ChildFor.MyClick
        System.Console.WriteLine("test")
    End Sub
end Class


来源:https://stackoverflow.com/questions/21564067/passing-event-to-the-parent-form

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!