Exit_Button mit messagebox..!
-
Hallo
Habe folgendes Problem:
Will, dass wenn man auf ein Button-clickt das Prog schliesst.
Bevor das Prog geschlossen wird soll eine MessageBox fragen ob man wirklich beenden will, wenn man ja drückt, dann soll beendet werden, wenn man nein drückt dann nicht.
Hier der code:private void exit_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("Wirklich beenden?", "Beenden", MessageBoxButtons.YesNo,MessageBoxIcon.Question); if (dr == DialogResult.Yes) { Application.Exit(); } else if (dr == DialogResult.No) { return; } }
Das "Nein" funktioniert ja einwandfrei.
Wenn "Ja" gedrückt wird dann kommt das Dialog Fenster nochmal und wenn man dann wieder "Ja" drückt, dann schliesst sich das Prog.
Wieso?
-
Die zweite Abfrage mit else if kannst Du Dir schenken.
Es gibt ja in diesem Fall ein "Ja" oder ein "Nein".
Wenn Du "Ja" abfragst, brauchst Du "Nein" nicht mehr vergleichen.
Sollte bei "Nein" noch eine andere Funktion ausgeführt werden, z.B. noch eine MessageBox ausgeben, dann nimm nur "else" ohne Vergleich "if".if(i == 0) { //i ist gleich 0 } else { //i ist ungleich 0 }
In Deinem Beispiel also so...
if(MessageBox.Show("Wirklich beenden?", "Beenden", MessageBoxButtons.YesNo, MessageBoxIcon.Question,MessageBoxDefaultButton.Button2) == DialogResult.Yes) { Close(); }
Gruß
-
Danke Dough_HH !
Aber habe gerade erkannt, dass mein Problem wo anders liegt.
Ok mein Code war nicht so gut, hattest recht brauche keine zweite else if abfrage, aber mein Problem ist, dass wenn ich auf "Ja" drücke sich das Prog nicht gleich schliesst, sondern die gleiche Frage nochmal gestellt wird.
Und das alles wegen diesem Code:private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox.Show("Wirklich beenden?", "Beenden", MessageBoxButtons.YesNo,MessageBoxIcon.Question); if (dr == DialogResult.No) { e.Cancel = true; } }
Also so wie ich das verstehe sobald ich auf "Ja" drücke, wird die Funktion Form1_FormClosing aufgerufen, deshalb wird ja auch gleich wieder die gleiche Frage gestellt, weil ich da auch genau die gleiche Messagebox aufrufe mit genau derselbe frage.
Wie kann ich denn mein Code umschreiben um das Prog gleich zu beenden ohne das die Closing funktion augerufen wird?
-
Geht aus Deinem Code nicht hervor.
-
Knuddlbaer schrieb:
Geht aus Deinem Code nicht hervor.
Verstehe nicht was du damit meinst!
Die WindowsApplication2 die du mir verlinkt hast ist nicht ganz, das was ich wollte!
Da wo du ein button hast mit dem man ne neue form öffnen kann, soll das prog auch geschlossen werden.
Also die form soll durch ein button und durch das x geschlossen werden.
Wenn ich das x anklicke schliesst sich die form ganz normal sobald ich auf ja gedrückt hab. Wenn ich aber den button drücke kommt wie erwartet die frage, dann aber nachdem ich auf ja drücke kommt die frage von der closing-funktion, wobei ja bei mir es die gleiche frage ist, als kommt die gleiche frage zweimal. und dann schliesst sich erst das prog.
Hier der code:private void exit_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("Wirklich beenden?", "Beenden", MessageBoxButtons.YesNo,MessageBoxIcon.Question); if (dr == DialogResult.Yes) { Close(); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox.Show("Beenden????", "Beenden", MessageBoxButtons.YesNo,MessageBoxIcon.Question); if (dr == DialogResult.No) { e.Cancel = true; } }
Zum Beispiel hier wenn ich auf exit-button klicke, kommt erst die message "Wirklich Beenden?" , nachdem ja kommt die Message "Beenden????" nachdem ja wird endlich das prog beendet.
Wenn man auf klickt funkt. alles ohne Probs.
-
Du hast ja auch zweimal die Abfrage eingebaut.
Das Programm macht nur das was Du Ihm vorgibst.
An C# liegt es also nicht :p LOL
Also mach das so…FormClosing
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("Wirklich beenden?", "Beenden", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No) { e.Cancel = true; } }
Button Exit
private void exit_Click(object sender, EventArgs e) { Close(); }
Gruß Doug_HH :xmas2:
-
Doug_HH schrieb:
Du hast ja auch zweimal die Abfrage eingebaut.
Das Programm macht nur das was Du Ihm vorgibst.
An C# liegt es also nicht :p LOLDas bezweifel ich auch nicht!
Deine Lösung hat funktioniert.
Weiss nicht, wieso mir das nicht eingefallen ist, da die lösung recht einfach und logisch aussieht.DANKE dir SEHR für deine Hilfe!
-
wie sieht das ganze im normalen c++ aus?
-
Was verstehst Du unter "normales" C++ ?
-
Ich mein wie sieht der quellcode in c++ windows formanwedung aus
-
Hier der Code für C++/CLI
//Form closing
private: System::Void Form1_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) { if (MessageBox::Show("Wirklich beenden?", "Beenden", MessageBoxButtons::YesNo, MessageBoxIcon::Question, MessageBoxDefaultButton::Button2) == ::System::Windows::Forms::DialogResult::No) { e->Cancel = true; } }
//Button Exit
private: System::Void exit_Button_Click(System::Object^ sender, System::EventArgs^ e) { Close(); }
Wenn Du "::System::Windows::Forms::DialogResult" nicht so schreiben möchtest, musst Du die namespace Global vereinbaren....
Von lokal...
#pragma once namespace klpm { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing;
In Global...
#pragma once using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace klpm {
Dann sieht der Code für die Abfrage so aus..
if (MessageBox::Show("Wirklich beenden?", "Beenden", MessageBoxButtons::YesNo, MessageBoxIcon::Question, MessageBoxDefaultButton::Button2) == ::DialogResult::No) { e->Cancel = true; }
Gruß, Doug_HH :xmas2:
-
Abgesehen davon das der Code trivial war und der Fragesteller selbst hätte bemühen können: Warum schiebst Du alles in den globalen Namensraum wenn Dir einer reichen würde ?
-
Richtig.
Hatte alle hoch geschoben
Asche auf mein Haupt.#pragma once using namespace System::Windows::Forms; namespace klpm { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Data; using namespace System::Drawing;
So wäre es vernüftiger.
Und die Aufgabe hätte er mit ein wenig Fleißarbeit selber hinbekommen.
Das ist ja nix dickes. :xmas2:
-
Hätte er insgesamt geschafft, die Aufgabe war Trivial. Wenn man sich dann aber schon wichtig machen will, dann bitte mit einem korrektem Ergebnis.
-
Doug_HH schrieb:
Hier der Code für C++/CLI
if (MessageBox::Show("Wirklich beenden?", "Beenden", MessageBoxButtons::YesNo, MessageBoxIcon::Question, MessageBoxDefaultButton::Button2) == ::System::Windows::Forms::DialogResult::No) { e->Cancel = true; } }
e->Cancel = true; funktioniert nicht : Fehler 4 error C2039: 'Cancel': Ist kein Element von 'System::EventArgs'
-
Bemühst du dich eigentlich das Problem selbst zu lösen oder sollen wir hier für dich die "Drecksarbeit" erledigen?
-
O.o natürlich bemüh ich mich ich versteh das nur nich warum da jetzt ein fehler is... ich hab die CLI Programierung noch nicht so lange in der schule... man man man. nur weil man mal fragt wird man hier gleich angeblufft
-
Aus Deinen Fragen geht hervor, das Du Dir keine Gedanken machst und null Eigeninitiative bringst.
Dough hat Dir bereits den vollständigen Code geliefert - der auch lauffähig ist. Scheinbar hat aber nicht mal das Copy and Paste geklappt.
-
1. Überlege ich selbst ob ich eine Lösung für mein Problem finde.
2. Ich befrage die MSDN.
3. Ich benutze Google.
4. Ich frage im Forum.So läuft es und nicht umgekehrt.
Aber ich will ja mal nicht so sein:
http://msdn.microsoft.com/en-us/library/fdwb3fd7(VS.80).aspx (Bekommst du auch wenn du in VS bei markiertem Fehler 'F1' drückst)
http://msdn.microsoft.com/en-us/library/system.eventargs_members.aspx
http://msdn.microsoft.com/en-us/library/system.componentmodel.canceleventargs_members.aspx