Form Verstecken statt Schließen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von jmb.96.

    Form Verstecken statt Schließen

    Hallo,
    Ist es mölich, nach drücken des Schließen-Buttons einer Form die Form lediglich zu verstecken ( Form.Visible = False) anstatt sie zu Schließen?
    Das ist bestimmt irgendwie ganz einfach, ich nur leider grade keinen Gedankenblitz :(

    Schonmal danke im Vorraus :)



    Mfg, jmb.96 :)
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."
    Ich denke mal du meinst das Form Closing Event ;)
    Ich denke das wäre das einfachste...

    VB.NET-Quellcode

    1. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    2.    Form1.Visible = false
    3. End Sub


    Ich weiß aber nicht ob es funktioniert ;)
    Das habe ich auch schon versucht, aber nach dem das FormClosingEvent abgearbeitet ist, wird die Form ja trotzdem geschlossen (Oder sogar vorher?????).
    Das wäre auch zu einfach gewesen ;)


    Mfg, jmb.96 :)
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."
    Schreibe das "X" das oben an jedem Fenster ist um!

    Wenn du dir mal die Events der Form1 genauer anguckst wirst du das Event FormClosing erkennen. Damit kannst du zb "Aufräumarbeiten" zum Ende des Programms erledigen, zb Dateien speichern. Oder aber man kann eben das Schließen per X-Button verhindern, indem man die FormClosingEventArgs-Eigenschaft Cancel auf true setzt, damit wird das Schließen des Programms unterdrückt und das Programm läuft weiter.

    Und nur so nebenbei, .NET ist so aufgebaut, dass man eigentlich auf die API-Aufrufe verzichten kann/soll. Für die allermeisten Aufgaben der API kann man ein entsprechendes .NET Pendant finden, bzw. man kann die Aufgabe mit .NET Mitteln umschreiben. Nur so am Rande für die Lernwilligen

    Btw: .NET benötigt dafür nur eine Zeile Code, mal abgesehen von Sub Form1_FormClosing ... End Sub


    Stimmt ga rnicht, dass ist deine Lsöung hehe! :D
    Und wie soll das gehen? Man hat ja darauf keinen Zugriff...
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."
    Oder sogar vorher??

    zuerst wird Formclosing, und danach FormClosed abgearbeitet. Erst dann ist Schluß.
    Die Lösung ist, nachdem du die aktuelle Form unsichtbar gemacht hast, das Beenden abzubrechen. Schau dir hierzu den Parameter E der Formclosing-Prozedur an. (e.cancel)
    Dann versucht doch mal, euch etwas in die Materie einzulesen. Alles einfach nur blind reintippen bringt euch gar nix.
    PS: du kannst mit e.closereason auch abfragen, warum die Form geschlossen wird. Wenn vom User beendet, dann mach unsichtbar, ansonsten beende das Programm.

    VB.NET-Quellcode

    1. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    2. Select Case e.CloseReason
    3. Case CloseReason.ApplicationExitCall
    4. 'Application.exit wurde aufgerufen
    5. Case CloseReason.TaskManagerClosing
    6. 'beendet durch Taskmanager
    7. Case CloseReason.UserClosing
    8. 'User hat das Fenster geschlossen
    9. Case CloseReason.WindowsShutDown
    10. 'Windows wird runtergefahren
    11. End Select
    12. End Sub

    Timtim schrieb:

    Dann lässt sich das BS nicht mehr beenden

    Stimmt, das ist eigntl. sogar logisch....
    2 Möglichkeiten, die mir nooch eingefallen sind:
    1. Den Schließknopf mit GDI mit einem eigenen überschreiben, fallst das geht, denn mit GDI kenn ich mich nicht aus ;)
    2. Ganz eigenes Foormdesing machen, dann hat man auch einen eigennen Knopf.



    Mfg, jmb.96 :)



    EDIT: der_Kurt war schneller...
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."
    Wenn du dir mal die Events der Form1 genauer anguckst wirst du das Event FormClosing erkennen. Damit kannst du zb "Aufräumarbeiten" zum Ende des Programms erledigen, zb Dateien speichern. Oder aber man kann eben das Schließen per X-Button verhindern, indem man die FormClosingEventArgs-Eigenschaft Cancel auf true setzt, damit wird das Schließen des Programms unterdrückt und das Programm läuft weiter.

    Und nur so nebenbei, .NET ist so aufgebaut, dass man eigentlich auf die API-Aufrufe verzichten kann/soll. Für die allermeisten Aufgaben der API kann man ein entsprechendes .NET Pendant finden, bzw. man kann die Aufgabe mit .NET Mitteln umschreiben. Nur so am Rande für die Lernwilligen

    Btw: .NET benötigt dafür nur eine Zeile Code, mal abgesehen von Sub Form1_FormClosing ... End Sub



    Das ist Deine Lösung!

    doom schrieb:

    Das ist Deine Lösung!

    An wen war das deine gerichtet?
    Mal ganz nebenbei kommt bei mir die Fehlermeldung das "e" nicht deklariert wurde.



    Mfg, jmb.96 :)
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."
    Mal ganz nebenbei kommt bei mir die Fehlermeldung das "e" nicht deklariert wurde.

    e ist ein Objekt vom Typ 'System.Windows.Forms.FormClosingEventArgs', also in der Signatur der Sub definiert; zumindest in zwei der gezeigten Lösungen. Solltest du eine andere haben, dann poste deinen Code bitte.
    Ratespiele bringen uns hier nicht weiter ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ () aus folgendem Grund: Rechtschreibfehler

    Ups, ich habe

    VB.NET-Quellcode

    1. (ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)

    vergessen...sry fürs Ratespiel ;)

    doom schrieb:

    Ich finde es hier nicht angebracht codes von den TE's zu bekommen und zu verbessern das was du Kurt gesagt hast reicht völlig aus, das Problem selbständig und effektiv zu lösen

    Stimme ich dir zu :)

    Nun gut, damit wäre das Thema wohl erledigt




    Mfg, jmb.96 :)
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."