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
Hallo filmee24,
vermutlich hast du den EventHandler mehr als einmal registriert.
herbivore
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
C. Anders
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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!
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.