Event manuell auslösen?

  • VB.NET
  • .NET 5–6

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von JLH.

    Event manuell auslösen?

    In einem Formular gibt ein User Zahlen in TextBoxen ein. Mit ​Validating wird die Eingabe geprüft und wenn ok wird mit Validated etwas ausgefüht. Werden die Daten mit ​Readline eingelesen zünden diese Events nicht. Kann man diese manuel starten?
    @JLH Sieh Dir mal die RaiseEvent-Anweisung an: learn.microsoft.com/de-de/dotn…ents/raiseevent-statement
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin mir nicht sicher ob ich was falsch mache oder ob was ich erreichen möchte damit nicht geht... Jedenfalls klappt es bei mir nicht.
    Ich habe folgende Sub die ich gerne gleich nach dem Einlesen des EWinkels starten möchte:

    VB.NET-Quellcode

    1. Private Sub txtEWinkel_Validated(sender As Object, e As EventArgs) Handles txtEWinkel.Validated
    2. ErrorProvider.SetError(txtEWinkel, "")
    3. Berechnen_RG()
    4. lblD0.Text = String.Format("{0:0.000000}", Math.Round(D0, 6))
    5. lblRg.Text = String.Format("{0:0.000000}", Math.Round(RG, 6))
    6. End Sub
    7. (Folgende Zeilen aus der Lade-Routine)
    8. .
    9. .
    10. .
    11. txtEWinkel.Text = myStream.ReadLine
    12. Aufruf txtEWinkel_Validated
    Ja, man könnte das Event auch manuell auslösen, wie RfG schrieb. Aber sauberer wär hier die Auslagerung des Codes in eine eigene Methode:

    VB.NET-Quellcode

    1. Private Sub txtEWinkel_Validated(sender As Object, e As EventArgs) Handles txtEWinkel.Validated
    2. ValidiereTextBoxInhalt(DirectCast(sender, TextBox))
    3. End Sub
    4. Private Sub ValidiereTextBoxInhalt(TextBox As TextBox)
    5. ErrorProvider.SetError(TextBox, "")
    6. Berechnen_RG()
    7. lblD0.Text = String.Format("{0:0.000000}", Math.Round(D0, 6))
    8. lblRg.Text = String.Format("{0:0.000000}", Math.Round(RG, 6))
    9. End Sub
    10. (Folgende Zeilen aus der Lade-Routine)
    11. .
    12. .
    13. .
    14. txtEWinkel.Text = myStream.ReadLine
    15. ValidiereTextBoxInhalt(txtEWinkel)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Sieht schick aus... ich müßte aber alle Events umschreiben. Ich habe auch vor den Spaghetti Code der mir da beim Konvertieren aus VB6 entstanden ist komplett auszumisten. Auf die schnelle würde mir Rod's Lösung gefallen, nur wie mach ich das? Es sieht mir danach aus, daß es nur mit selbst erstellten Events geht.
    Hmnee. Geht auch mit "Fremdevents": RaiseEvent txtEWinkel.Validated(txtEWinkel, EventArgs.Empty)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich habe mit RaiseEvent txtEWinkel_Validated(txtEWinkel, EventArgs.Empty) probiert und mit Deinem Vorschlag RaiseEvent txtEWinkel.Validated(txtEWinkel, EventArgs.Empty) Und ich bekomme:

    Fehler BC30676 "txtEWinkel" ist kein Ereignis von "Form1".
    Fehler BC30676 "txtEWinkel_Validated" ist kein Ereignis von "Form1".

    Habe übersehen, daß man eine WithEvents Variable hinzufügen soll. Aber jetzt gelingt mir das nicht....
    ​Private WithEvents txtEwinkel_Validated As was?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „JLH“ ()

    Argh. Bullshit meinerseits. Man kann kein Event eines anderen Objektes auslösen. Es geht wohl doch nur das Methodenauslagern.
    Oder kompliziert über Reflection. Aber das ist schon Overkill.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.