Programm beenden - Abfrage ...

Don Philippo

Mitglied
Hi Leute,

hab ein kleines Problem. Möchte für mein Programm eine Abfrage einrichten, die den Benutzer auffordert, das Beenden des Programms definitiv zu bestätigen.

Habe ein MainForm, wo ich z.B. das MenuItem "Beenden" anklicke. Dabei soll das Form "QuitBox" aufgerufen werden. Dort soll man dann via Ja/Nein-Button bestätigen, ob man beenden will oder nicht.
Der Ja-Button soll der MainForm einen Boolean "_Exit = true" zurück und der Nein-Button ein "false".
Im MainForm habe ich dafür ein Property angelegt:

Code:
...
        public bool _Exit
        {
            get { return this.bExit; }
            set { this.bExit = value; }
        }

	public FormMain()
	{
		//
		// Erforderlich für die Windows Form-Designerunterstützung
		//
		InitializeComponent();
		//
		// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
		//
	}
...

Nachdem der Abfrage-Dialog "QuitBox" geschlossen wurde, möchte ich die Boolean "bExit" abfragen und entscheiden, ob das Programm geschlossen wird oder nicht.

Die Boolean werden kurzzeitig mit "true" beschrieben, für den Fall, daß ich beenden will, werden jedoch gleich wieder mit dem ursprünglichen Initialwert "false" überschrieben, bevor es zur Abfrage der Boolean kommt.

Kann mir jemand dabei behilflich sein, bzw. ne möglicherweise bessere Vorgehensweise vorschlagen?!

Hier noch ein bißchen Code:

MainForm:
Code:
private void EXIT()
{
            QuitBox frmQuit = new QuitBox();
            frmQuit.ShowDialog();

            if (bExit) //Boolean, das über den QuitBox-Dialog beeinflußbar sein soll
            {
                Application.Exit();
            }
}

QuitBox (AbfrageDialog):
Code:
namespace MyNamespace
{
    public partial class QuitBox : Form
    {
        FormMain frmMain = new FormMain();

        public QuitBox()
        {
            InitializeComponent();
        }

        private void bttYesExit_Click(object sender, EventArgs e)
        {
            frmMain._Exit = true;
            this.Close();
        }

        private void bttNoExit_Click(object sender, EventArgs e)
        {
            frmMain._Exit = false;
            this.Close();
        }
    }
}

Freue mich auf Eure Tipps! :)

Gruß,
Philippo
 
Hi

Wieso so umständlich?
Schau dir mal das Event Form.Closing an, das findest du ein Beispiel, für das was du vor hast. ;)
 
Hi Nico,

vielen Dank für deinen Post. Ist ein guter Tipp. Allerdings ist es egal, ob ich YES oder NO drücke. Das Programm wird so oder so geschlossen.
Das Event "e.Cancel" setze ich auf "false" für den Fall, daß ich nicht beenden möchte?!
Irgendwas stimmt noch nicht ...

Code:
        private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
        {
                // Display a MsgBox asking the user to save changes or abort.
            if (MessageBox.Show("Wollen Sie das Programm wirklich beenden?", "",
               MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                // Cancel the Closing event from closing the form.
                e.Cancel = true;
                //Call method for exit operations (save all open files ...)
                EXIT();
            }
            else
            {
                e.Cancel = false;
            }

        }

LG,
Philippo
 
Richtig, aus folgendem Grund:
1. Du hast true und false vertauscht. Wenn die Frage zum Beenden mit Ja beantwortet wird, muss e.Cancel auf true gesetzt werden.
2. Dein Programm wurde trotzdem beendet, da du in deiner Methode "EXIT" Application.Exit() aufrufst. Falls du in der Methode nur das machst, was du oben gepostet hast, kannst du diese auch weg lassen.

Im Anhang ist ein kleines Beispiel:
 

Anhänge

  • Ask4Closing.zip
    11,5 KB · Aufrufe: 113
Zurück