Abbruch einer Button-Aktion

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Abbruch einer Button-Aktion

    Moin !

    ich habe eine Schaltfläche in einer Form mit der Eigenschaft "DialogResult" = OK oder Cancel.

    Wenn die Schaltfläche aufgerufen wird erfolgt eine Prüfung nach bestimmten Bedingungen.

    Werden diese nicht erfüllt, dann soll der Dialog erhalten bleiben.

    Ich dachte mit EXIT SUB das lösen zu können - aber weitgefehlt. Der Dialog wird dennoch geschlossen.

    Aus alten VB6-Zeiten war mir, als wenn es etwas gab - aber was?

    Kann mir einer weiterhelfen ?

    Gruß Jan

    jan99 schrieb:

    Der Dialog wird dennoch geschlossen
    So isses.
    Gugst Du hier.
    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!
    Sorry, aber jetzt verstehe ich nur noch Bahnhof...

    Ich muss doch einer Schaltfläche, die einmal den Dialog schließen soll, auch ein DialogResult zuweisen damit ich später nachvollziehen kann wie dieser geschlossen wurde (OK oder Abbruch)...

    Wenn ich aber Abbruch klicke, dann möchte ich nochmal dem User die Chance geben nicht alle seine Eingaben zu verwerfen. Ebenso möchte ich prüfen können, wenn Eingaben fehlen ... dann sollen diese noch eingetragen werden können um dann mit OK den Dialog zu verlassen und eine nächste Aktion zu machen.

    Wie wäre dann der richtige Weg zum Ziel .... ?

    Gruß Jan

    jan99 schrieb:

    der richtige Weg zum Ziel
    wäre, die Property DialogResult erst dann zu setzen, wenn Du fertig bist.
    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!

    jan99 schrieb:

    Designer "NONE" ??
    What :?:
    Ich glaube, wir reden aneinander vorbei.
    Im Designer kannst Du einem Button ein DialogResult zuweisen. Da wird beim Drücken dieses Buttons der Dialog-Property DialogResult dieser Wert zugewiesen.
    Das kannst Du mit Me.DialogResult = Windows.Forms.DialogResult.Ignore auch direkt zuweisen. Wen Du das getan hast, wird der Dialog beendet mit ebendisem Wert.
    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!
    Wenn die Schaltfläche aufgerufen wird erfolgt eine Prüfung nach bestimmten Bedingungen.
    Werden diese nicht erfüllt, dann soll der Dialog erhalten bleiben.

    Die Buttons verhalten sich beim Setzen ihres DialogResult so, wie im MSDN beschrieben (unter Hinweise): msdn.microsoft.com/de-de/libra…alogresult(v=vs.110).aspx
    Das ist nicht das, was du möchtest. Nutze einfach den DialogResult des Formulars und lass die Buttons in Ruhe.
    Der Code zu deinem Button führt dann seine Prüfungen durch und wenn alles ok ist, dann muss als Abschluss folgendes ausgeführt werden:

    Quellcode

    1. Me.DialogResult = DialogResult.OK

    Dann wird das Formular geschlossen und dem Aufrufer des Formulars wird OK als Dialogresult geliefert.
    Me.Close kann entfallen, das Setzen des DialogResult schließt das Formular sowieso schon.
    Und wenn die Bedingungen nicht erfüllt sind, dann bleibt man einfach im Formular drin.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    Übergib dem Button für den Abbruch den DialogResult Abort und im FormClosing Event frägst du den DialogResult der Form ab und reagierst dem entsprechend.

    VB.NET-Quellcode

    1. If Me.DialogResult = DialogResult.Abort Then
    2. e.Cancel = True
    3. End If

    Moin !

    ich habe da nochmal ein Problem was in Verbindung zu DialogResult vermutlich steht und deshalb hänge ich das hier nochmal ran ....

    Ich habe eine Schaltfläche zum Schließen die in den "normalen" Eigenschaften DialogResult=none hat. Hier der Click-Code:

    VB.NET-Quellcode

    1. Private Sub bt_Digitalisieren_Click(sender As Object, e As EventArgs) Handles bt_Digitalisieren.Click
    2. Digitalisieren_Aktion()
    3. End Sub
    4. Private Sub Digitalisieren_Aktion()
    5. ' prüfen, ob auch eine Elementtyp gewählt
    6. ' Retry ist dieser Schaltfläche zugewiesen
    7. Me.bt_Digitalisieren.DialogResult = Windows.Forms.DialogResult.Retry
    8. End Sub


    Dann habe ich da noch eine Liste die mit einem Doppelklick auch auf das Schließen des Dialoges zugreifen soll:

    VB.NET-Quellcode

    1. Private Sub lb_Elemente_DoubleClick(sender As Object, e As EventArgs) Handles lb_Elemente.DoubleClick
    2. Digitalisieren_Aktion()
    3. End Sub



    Wenn ich die letztgenannte Funktion aufrufe, dann wird das Schließen des Dialoges übergangen!

    Kann mir einer sagen, wo mein Gedankenfehler sein könnte?

    Gruß Jan
    Moin !

    ich habe mich dem Thema noch einmal wieder zugewandt. Falls ich das vor 1 1/2 Jahren schon einmal gelöst habe finde ich es nicht wieder ! :(

    Habe mir das den Vorschlag von "Fakiz" aus Posting #9 nochmal zugewandt und dabei ist folgendes herausgekommen:

    VB.NET-Quellcode

    1. Private Sub CheckDialogCloseing(sender As Object, e As EventArgs) Handles MyBase.FormClosing
    2. If _SelectionHasChange = True Then
    3. If MessageBox.Show("Einstellungen wurden manuell geändert." & vbCrLf & vbCrLf & _
    4. "Wollen Sie wirklich den Dialog schließen?" & vbCrLf & _
    5. "Einstellungen gehen damit verloren!", "Nachgefragt ...", MessageBoxButtons.YesNo) = DialogResult.No Then
    6. End If
    7. End If '_SelectionHasChange
    8. End Sub


    Ich würde in das innere IF gerne das vorgeschlagene

    VB.NET-Quellcode

    1. e.cancel=true


    zuweisen - aber es wird mir nur Equals, GetHashCode, GetType oder ToString im Kontext vorgeschlagen.

    Kann mir einer von Euch weiterhelfen?

    Gruß Jan