Form reagiert nicht auf close()

  • VB.NET
  • .NET 4.5

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

    Form reagiert nicht auf close()

    Guten Morgen,
    ich habe folgendes Problem:

    Form1 ist geöffnet und ich klicke auf einen Button welcher folgenden code enthält:

    VB.NET-Quellcode

    1. Dim frm2 As New Form2
    2. frm2.ShowDialog() 'habs auch schon nur mit show versucht
    3. me.Close()


    Form 2 wird daraufhin geöffnet, Form1 wird aber nicht geschlossen sondern bleibt offen und reagiert einfach nicht mehr (.hide macht auch nichts) ....
    Form 2 hat dann den gleichen Code um wieder zu Form1 zu gelangen:

    VB.NET-Quellcode

    1. Dim frm1 As New Form1
    2. frm1.ShowDialog()
    3. me.Close()


    funktioniert ebenfalls nicht (Form2 bleibt wieder ohne Reaktion offen). Form1 wird neu geöffnet (kann dort auch alle ganz normal machen). Das "alte" Form1 bleibt aber weiterhin bestehen???



    Was könnte der Grund dafür sein das Me.close() nicht funktionert? Bzw. was kann ich machen das das funktionert? ?(


    Danke schon mal
    Pat

    (Ps.: Den Beitrag hab ich gesehen aber ich bin mit der Antwort nicht zu frieden weil ich einfach wissen möchte warum es nicht mit Me.close() geht. :) )
    Hi,
    wenn Form1 die Hauptform ist, dann bewirkt Me.Close das die Anwendung geschloßen wird. Solange aber eine Form mit ShowDialog offen ist funktioniert das nicht (glaub ich).

    ich mache dies in einem meiner Projekte so:

    VB.NET-Quellcode

    1. Private Sub showDragDrop()
    2. Using f As New frmDrop
    3. Me.Visible = False
    4. If f.ShowDialog() = DialogResult.OK Then Me.Visible = True : Me.BringToFront()
    5. End Using
    6. End Sub

    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Hi,
    wenn Form1 die Hauptform ist, dann bewirkt Me.Close das die Anwendung geschloßen wird. Solange aber eine Form mit ShowDialog offen ist funktioniert das nicht (glaub ich).


    Ich habe aber in den Projekteinstellungen es so eingestellt das das Programm sich nur beendet wenn alle Froms geschlossen sind (und nicht nur das Hauptform). Ich finde es nur komisch da ich bis jetzt immer die Forms so geschlossen habe und aus irgendeinem Grund gehts jetzt nicht mehr...
    Mit ShowDialog() öffnest du Form2 als von Form1 abhängigen Dialog. Diese Funktion blockiert, d.h. deine Funktion, die ShowDialog() aufruft, wird erst dann mit Me.Close() forgeführt, wenn der geöffnete Dialog wieder geschlossen wird. Stattdessen öffnest du auch hier einen neuen abhängigen Dialog, der ebenfalls blockiert. Das KANN nicht funktionieren.

    Verwende Show() statt ShowDialog(). Dann sollte das Problem nicht mehr bestehen.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    @Die Wucht Was hat das für einen Sinn? End ist ein Schlüsselwort, das einfach ohne Kontext wenig Sinn macht.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade: Naja, doch, schon. Ist ähnlich wie das Abschießen über den TaskManager: Knallhartes, ungeregeltes, sofortiges Programmende. Also für diesen Thread hier keine adäquate Problemlösung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Auszug aus MSDN
    The End statement stops code execution abruptly, and does not invoke the Dispose or Finalize method, or any other Visual Basic code. Object references held by other programs are invalidated. ...

    Daher
    You should use End sparingly, and only when you need to stop immediately. The normal ways to terminate a procedure (Return Statement and Exit Statement) not only close down the procedure cleanly but also give the calling code the opportunity to close down cleanly ...

    Die Wucht schrieb:

    probiers doch mal aus!
    Bist Du ein Zimmermann, der permanent mit nem Holzhammer arbeitet?
    Wir arbeiten hier mit .NET, das steht oben im Titel. Daran sollte sich Deine Antwort orientieren.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Die Wucht Also davon abgesehen, dass es mehr ein Problem war, dass in der Art des ​Show-Aufrufs lag und das Thema schon erledigt ist: Das ist keine gute Idee. Stattdessen sollte man wenn schon ​Application.Exit verwenden.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: