Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
FormClosing event wird zweimal ausgelöst
filmee24
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

FormClosing event wird zweimal ausgelöst

beantworten | zitieren | melden

hallo,
ich möchte eine Nachricht erscheinen lassen wenn der Benutzer ungespeicherte Daten im Programm hat, wenn geschlossen wird, das funktioiert auch, aber die Nachricht kommt 2-Mal.


 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(Application.isDirty)
            {
                if(MessageBox.Show("Would you close without saving changes?", "Close?", MessageBoxButtons.OKCancel) == DialogResult.OK)
                {
                    System.Windows.Forms.Application.Exit();
                    e.Cancel = false;
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }
C. Anders
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo filmee24,

vermutlich hast du den EventHandler mehr als einmal registriert.

herbivore
private Nachricht | Beiträge des Benutzers
filmee24
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

ich habe geschaut, ist nur einmal registriert

wenn ich steppe, geht er ab System.Windows.Forms.Application.Exit(); zurück zum event und startet erneut
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von filmee24 am .
C. Anders
private Nachricht | Beiträge des Benutzers
filmee24
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

hat sich erledit, habe Application.Exit entfernt
C. Anders
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo filmee24,

ist eigentlich klar. Wenn du Exit aufrufst ist die Form ja noch da, somit ist alles noch registriert und er geht nochmal rein.

Es gibt das CloseReason-Enum. Das ist "UserClosing" wenn der User es ausgelöst hat. Das könntest du abfragen.

EDIT: Zu langsam, hast ja schon eine Lösung

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
Shayliar
myCSharp.de - Member



Dabei seit:
Beiträge: 18
Herkunft: Düsseldorf

beantworten | zitieren | melden

Hallo leider habe ich dazu auch eine Frage:

Ich habe 1. Form (Benutzer/Passwort Eingabe), bei richtiger Eingabe geht er in Form 2


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace Easy_DienstPlan
{
    public partial class Easy_Dienstplan_main : Form
    {
        public string UserName { get; set; }
        public Easy_Dienstplan_main()

        {

            InitializeComponent();
        }

        private void Easy_Dienstplan_main_Load(object sender, EventArgs e)
        {
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Easy_Dienstplan_main_FormClosing);
            lbl_Anzeige_Benutzer.Text = "Hallo, Marc Franz.";
        }
        private void Easy_Dienstplan_main_FormClosing(Object sender, FormClosingEventArgs e)
        {
            MessageBox.Show("Möchtest du wirklich beenden?\nNicht gespeichertes geht verloren!", "Easy Dienstplan beenden!", MessageBoxButtons.OK);
            Application.Exit();
        }
    }
}


nun wenn ich auf Beenden gehe (klick auf das X) fragt er 2 mal ab...und beendet dann.

Wenn ich MessageBox.Show
entferne, dann beendet er natürlich ohne abfrage..

Wieso macht er das...das es mit MEssageBox.Show 2 mal abgefragt wird und dann beendet?

Sorry stehe auf dem Schlauch.

Sorry
hier könnte deine Signatur stehen!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Shayliar,

die Lösung steht oben doch schon: Mit Application.Exit stößt du das Schließen gleich nochmal an.
Wenn das Form geschlossen werden soll, musst du gar nichts machen.
Wenn es offen bleiben soll, setzt du e.Cancel auf true.
Das ist alles.

Um diese Entscheidung zu treffen, sollte/muss die MessageBox mindestens zwei Button haben. Wie das zum Beispiel geht, steht auch oben, auch wenn ich eher Ja/Nein Buttons verwenden würde, oder noch besser eine MessageBox gleich ganz vermeiden würde, z.B. mit [Snippet] Nicht-modale Abfrage als Alternative für MessageBoxen oder allgemeiner mit Nenne deinen Fall, wo du denkst, ohne modalen Dialog geht es nicht, und ich nenne eine Alternative.

herbivore

PS: Solltest du das Application.Exit doch benötigen, darfst du die Aktionen im FormClosing-Event nur durchführen, wenn der CloseReason UserClosing ist. Wird auch schon oben erwähnt.
private Nachricht | Beiträge des Benutzers