Porównaj ceny domen i usług IT, sprzedawców z całego świata

Jak mogę wyzwolić zdarzenie formularza nadrzędnego z formularza podrzędnego?


Mam formularz nadrzędny, z którego tworzę i wystąpienie innego formularza. (formularz podrzędny)
Próbuję wywołać zdarzenie w formularzu nadrzędnym z formularza podrzędnego.
(Próbowałem przeczytać kilka podobnych pytań na temat SO, ale były one w języku c # lub miały zbyt mało wyjaśnienia dla początkującego, takiego jak ja.

Formularz nadrzędny

:
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick Dim index As Integer = Convert.ToInt32(DataGridView1.CurrentCell.RowIndex) Dim frmjvauth As New frmjventry_Auth
frmjvauth.Show()
frmjvauth.txtjvnumver.Text = DataGridView1.CurrentRow.Cells("jvnumber").Value
frmjvauth.showjv()
End SubPrivate Sub child_Change(sender As Object, e As EventArgs)
MsgBox("hey")
End Sub


Uniform dla niemowląt

:
Private Sub frmjventry_Auth_FormClosed(sender As System.Object, e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
RaiseEvent child_Change(Nothing, Nothing)
End Sub

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wyzwalanie wydarzenia spoza klasy zależy od implementacji Twojego wydarzenia i klasy.

Zdarzenie jest wywoływane, gdy wystąpi określone zdarzenie, na przykład gdy wartość właściwości ulegnie zmianie, po kliknięciu przycisku i tak dalej. Aby wywołać to zdarzenie, musisz zasymulować to zdarzenie, na przykład musisz ustawić wartość dla właściwości, która ma wyzwalać zdarzenie zmiany, lub na przykład dla przycisku, musisz wywołać
PerformClick
metoda tego przycisku.
Ale ogólnie lepiej jest utworzyć metodę publiczną w formie nadrzędnej, umieścić tam swoją logikę i wywołać tę metodę spoza formularza.
Na przykład zakładam, że musisz wywołać zdarzenie
Click
przycisku 1 i mieć ten kod:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
//Some logic here
End Sub


opcja 1

Możesz dodać metodę publiczną i przenieść tam swoją logikę, a także wywołać tę metodę w
button1_Click
:
Public Sub MyLogic()
//Some logic here
End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MyLogic()
End Sub

wtedy z zewnątrz możesz po prostu użyć tej logiki:
//I suppose f is an instance of your form
f.MyLogic()


Opcja 2

Możesz ustawić
Button1
jako publiczny, przejść do projektanta, wybrać
Button1
i ustawić właściwość
Modifier
na
public
. Następnie możesz użyć tego kodu poza formularzem:
//I suppose f is an instance of your form
f.Button1.PerformClick()


Wariant 3

W przypadku wydarzeń ręcznych możesz utworzyć w formularzu metodę publiczną, która podniesie Twoje zdarzenie:
Public Event YourEvent()Public Sub OnYourEvent()
RaiseEvent YourEvent()
End Sub

A następnie użyj go poza formularzem w następujący sposób:
//I suppose f is an instance of your form
f.OnYourEvent()


Próba

Oto próbka zawierająca 2 formularze:
'Here is the code for parent form
Public Class ParentFormClass
Public Sub MyLogic()
MessageBox.Show("My Logic is Running!")
End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MyLogic()
End Sub 'This is the way that you pass an instance of parent to child
Private Sub ShowChildFormButton_Click(sender As Object, e As EventArgs) Handles ShowChildFormButton.Click
Dim f As New ChildFormClass(Me)
End Sub
End Class'Here is the code for child form
Public Class ChildFormClass
Private MyParentForm As ParentFormClass Public Sub New(form As ParentFormClass)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
MyParentForm = form
End Sub Private Sub CallParentFormMethodButton_Click(sender As Object, e As EventArgs) Handles CallParentFormMethodButton.Click
MyParentForm.MyLogic()
End Sub
End Class
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dodaj zdarzenie publiczne do formularza podrzędnego i wywołaj procedurę w jego programie obsługi w formularzu głównym. Również nieprzesyłanie czegokolwiek podczas zgłaszania wydarzenia jest złym pomysłem. Musisz przekazać mnie jako obiekt nadawcy, a nowy obiekt EventArgs jako e.
Public Class ChildForm
Public Event OnChanged(ByVal sender As Object, ByVal e As EventArgs) Private Sub frmjventry_Auth_FormClosed(sender As Object, e As EventArgs) Handles frmjventry_Auth.FormClosed
RaiseEvent OnChanged(Me, New EventArgs)
End Sub
End ClassPublic Class MainForm
Private Sub ChildForm_OnChanged(sender As Object, e As EventArgs) Handles ChildForm.OnChanged
DoSomething()
End Sub Private Sub DoSomething()
...
End Sub
End Class

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się