Wie man das Ereignis aus Benutzer-Steuerelement auf einem anderen Formular vb.net
Ich bin nicht vertraut mit dem Benutzer steuert. Ich habe Benutzer-Steuerelement mit Schaltflächen OK und Abbrechen, ich hinzufügen dieses Steuerelement, um ein leeres Formular während der Laufzeit, habe ich eine andere form, die ich als "Main Form", Im code öffne ich das leere Formular und fügen Sie das Benutzersteuerelement, nach, dass ich möchte ein Ereignis auslösen (auf die OK-Schaltfläche) aus dem user-control (oder der leeren form, weiß ich nicht!) das Hauptformular!
Habe im Netz gesucht und gefunden Weg, um ein Ereignis zu erstellen und erhöhen die Veranstaltung in der gleichen form. Ich habe versucht, das gleiche zu tun, zwischen verschiedenen Formen, aber ich weiß nicht, wie das zu tun.
Veranstaltung erstellen
Public Event OKEvent As EventHandler
raise event
Protected Overridable Sub OnbtnOKClick(e As EventArgs)
AddHandler OKEvent , AddressOf btnOKClickHandler
RaiseEvent OKEvent(Me, e)
End Sub
Sub -
Sub btnOKClickHandler(sender As Object, e As EventArgs)
'Event Handling
'My event code
End Sub
Griff mein event auf btnOK.klicken Sie auf Ereignis
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
OnbtnOKClick(e)
End Sub
Okey, das alle Codes die Funktionsweise ist die gleiche form, vielleicht etwas chaotisch, aber das, was ich im Netz gefunden habe, möchte ich ähnlich zu gestalten, was aber auf die verschiedenen Formen, wie organisiere ich meinen code?
- Ich habe zu Fragen, warum sind Sie mit dem hinzufügen dieses Steuerelement, um ein leeres Formular, wenn Sie konnte nur entworfen, ein Formular in den ersten Platz?
- weil das leere Formular fügen Sie verschiedene Benutzer-Steuerelemente basierend auf bestimmten Bedingungen, so erstelle ich den Benutzer-Steuerelement und fügen Sie es dem Formular, wenn die Bedingung erfüllt ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht ein Ereignis auslösen "zu" überall. Der ganze Sinn der Veranstaltungen ist, dass Sie don ' T haben zu kümmern, der zuhört. Es ist bis zu den wer sich auf das Ereignis reagieren, damit umzugehen und wer das Ereignis ausgelöst hat, hat nie über Sie wissen.
So, alles, was Sie tun müssen, in diesem Fall ist die wichtigste form behandeln der entsprechenden Veranstaltung(en) des Benutzers die Kontrolle. Die Benutzer-Steuerelement ist ein Steuerelement, wie jeder andere und das event ist ein event wie jedes andere, also das Hauptformular, der das Ereignis übernimmt der Benutzer die Kontrolle, wie es das handhaben würde, jeden anderen Fall von einem anderen Steuerelement. Wo Sie erstellen, die dem Benutzer die Kontrolle, verwenden Sie einen
AddHandler
- Anweisung, um einen handler registrieren, für den Fall, Sie erklärt in der Benutzer-Steuerelement.EDIT:
Den
OnbtnOKClick
Methode, die Sie haben oben gezeigt sollte nicht so Aussehen:aber eher wie diese:
Auch, die
btnOKClickHandler
Methode im Hauptformular, nicht der Kontrolle durch die Nutzer. Als ich sagte in meiner Antwort, es ist die wichtigste form, die das Ereignis behandelt. Das bedeutet, dass die event-handler in der main-form. Wie ich auch sagte, wenn Sie erstellen die Benutzer-Steuerelement im Hauptformular, das ist, wo Sie sich registrieren der event handler, z.B.Ich hoffe, dass Sie aufgenommen haben, in Ihr zu Lesen, wenn Sie
AddHandler
zur Registrierung eines Ereignis-handler dann benötigen Sie ein entsprechendesRemoveHandler
aufheben, wenn das Objekt fertig gestellt ist.Button
im code und den Umgang mit dessenClick
Veranstaltung. Die Tatsache, dass das user control Hinzugefügt wird, eine andere form ist das nicht wirklich relevant. Ein Objekt ist ein Objekt und ein Ereignis ist ein Ereignis. Ich habe ein kleines code-Beispiel auf meine Antwort.Wenn ich verstehen richtig, Sie haben...
...aber Sie wollen einen weiteren Schritt der:
Das problem ist hier, dass die FormA hat keine Referenz zu UserControlB weil FormB wurde, die Sie erstellt das Benutzersteuerelement. Ein zusätzliches problem ist, dass FormB keine Ahnung haben, die FormA ist (je nachdem, wie hast du es einrichten).
Option 1 - Pass-Referenzen
Wenn Sie wollen, sowohl FormB und FormA zu reagieren, um eine SINGLE "OK" - Ereignis (generiert, indem die UserControl), dann müsste man irgendwie eine Referenz für alle drei Spieler in der gleichen Stelle, so kann das Ereignis richtig verdrahtet. Der logische Ort, um dies zu tun wäre in der FormB, wie das ist, wo das UserControl erstellt wird. Um das zu erleichtern, jedoch würden Sie ändern, FormB, so dass ein Verweis auf FormA ist irgendwie auf ihn übergegangen. Dann können Sie den Draht bis die "OK" - event direkt zum hf in FormA, wenn FormB schafft seine Instanz UserControlB:
Option 2 - "Blase" die Veranstaltung
Eine weitere option ist die "Blase" die Veranstaltung von FormB bis zu FormA. In diesem Szenario, FormB haben keine Ahnung, wer FormA ist, also keine Referenz übergeben werden. Stattdessen FormB wird seine eigenen "OK" - Ereignis, das ausgelöst wird, in Reaktion auf den Empfang der original - "OK" - Ereignis aus UserControlB. FormA erhalten Sie die "OK" - Meldung von der UserControl, nur nicht direkt:
Design-Entscheidungen
Haben Sie, um eine design-Entscheidung hier. Wer ist die Quelle des "OK" - Ereignis? Sollte es das UserControl oder FormB? Wird das UserControl immer verwendet werden, in verschiedenen Formen (außer FormB)? Wird FormB immer verwendet werden, mit anderen Formen dann FormA? Diese Antworten können Ihnen helfen, zu entscheiden, welcher Ansatz besser ist...oder kann dazu führen Sie zu überdenken, wie Sie sich entwickelt haben, Ihre aktuelle Lösung, die Sie benötigen, zu ändern, gänzlich auf.