Entwickler-Ecke
WinForms - Problem mit Schließen einer Form
ramatus - Do 17.11.11 09:37
Titel: Problem mit Schließen einer Form
Hi,
ich wechsel zwischen 2 Forms hin und her. Nun ist mir aufgefallen , dass wenn ich den Schließen Button des Fenster betätige diese Wechsel auch
vollzogen wird woran liegt das ?
viele grüße
claudia
jaenicke - Do 17.11.11 09:45
Weil das zweite Fenster dann ja auch geschlossen wird und ShowDialog zurückkehrt.
Wenn du das nicht möchtest, kannst du im Ereignis FormClosing des zweiten Fensters auf den Wunsch des Benutzers das Fenster zu schließen reagieren und es mit dem Setzen von e.Cancel auf true abbrechen. Dann bleibt das Fenster offen. Allerdings ist die Frage, ob das das ist was der Benutzer möchte. Eine Nachfrage wäre zumindest sinnvoll. ;-)
Nebenbei kann der komplette Wechsel zwischen Fenstern den Benutzer auch verwirren, weil das erste Fenster komplett weg ist. Oft ist es sinnvoller dieses im Hintergrund offen zu lassen. Mit ShowDialog kommt an das erste Fenster ohnehin niemand heran während das zweite angezeigt wird.
ramatus - Do 17.11.11 10:42
Das passiert doch aber auch wenn ich versuche die Startform zu beenden. Eigentlich war es schon so gedacht, dass ich das erste Fenster als
Willkommensbildschirm benutzten wollte.
Kehre ich nun aber zurück zum Ausgangsfenster und will die gesamte Anwendung schließen, dann öffnet er nun wieder das 2 Fenster und das möchte ich natürlich nicht.
Liebe Grüße
Claudia
P.S. Ich habe das mal versucht , wenn ich das Ausgangsfenster geöffnet lasse tritt der selbe Fehler auf. Ich kann die Anwendung nicht schließen.
mats74 - Do 17.11.11 14:16
Hallo Claudia
Zum Schliessen der geladenen Forms kannst Du die Funktion Application.ExitThread() durch irgend ein Ereignis auslösen.
Der geladene Thread wird dann beendet und die geladenen Forms logischerweise auch.
jaenicke - Do 17.11.11 15:48
Du meinst dann wohl etwas in der Richtung Splashscreen:
http://www.codeproject.com/KB/cs/prettygoodsplashscreen.aspx
C# SPLASHSCREEN
Das Vorgehen sollte eigentlich genau umgekehrt sein:
Der Splashscreen wird beim Start angezeigt, aber das Hauptfenster, das danach kommt, ist auch das Hauptfenster. Zumindest ist das in Delphi so, in C# habe ich das noch nie gemacht.
Jedenfalls könntest du natürlich auch (wenn du das so willst) nach dem ShowDialog die Anwendung schließen statt das erste Fenster wieder anzuzeigen. Das kannst du dann auch unterscheiden, je nachdem wodurch das Fenster geschlossen wurde. Dafür hat ShowDialog einen Rückgabewert, den du beim Klicken des Buttons setzen kannst, wenn dann etwas anderes passieren soll:
http://msdn.microsoft.com/en-us/library/65ad5907.aspx
ramatus - Do 17.11.11 16:50
Hallo,
bis jetzt geht das immer noch nicht, ich möchte doch nur den schließen button oben in der ecke benutzten um das Fenster zu schließen.
ich habe doch gar kein ja bzw. nein button.
gibt es da nicht eine lösung für ?
liebe grüße claudia
mats74 - Do 17.11.11 17:25
Wenn Du das Kreuz in der oberen Ecke benutzt, kannst Du mit dem FormClosing-Ereignis den Vorgang beeinflussen, also dein Form schliessen oder halt eben nicht.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = false; Application.ExitThread(); } |
Dass das Form nicht automatisch geschlossen wird, ohne beeinflussung dieses Events finde ich irgenwie merkwürdig :gruebel: .
Ich brauche diesen Event beispielsweise zum Verhindern eines Abbruch des Forms bei bestimmten Programmbedingungen.
Ansonsten würdest Du uns mit ein Bisschen Beispielcode bei der Lösung behilflich sein.
ramatus - Do 17.11.11 17:40
ich habe einen startbildschirm mit 3 button und momentan 2 forms es sollen einmal 4 forms werden.
beim button klick event rufe ich die neue form auf und kann auch wieder zurück . nur wenn ich dann den startbildschirm normal mit den kreuz schließen will ruft
er wiederum die unterform auf. in abap hätte ich jetzt gesagt das der ok code noch nicht leer ist und erst gecleart werden muss . aber wie macht man das in c #
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| namespace WindowsFormsApplication1 { public partial class Willkommen : Form { public Willkommen() { InitializeComponent(); } Auswertung form =new Auswertung(); private void Lieferanten_Click(object sender, EventArgs e) { DialogResult = DialogResult.None; using (Auswertung MyForm = new Auswertung()) MyForm.ShowDialog(); this.Show(); } private void btnSupply_Click(object sender, EventArgs e) {
}
private void pictureBox1_Click(object sender, EventArgs e) { }
private void label1_Click(object sender, EventArgs e) {
} |
Moderiert von
Th69: C#-Tags hinzugefügt
ramatus - Do 17.11.11 18:17
ich habe jetzt eine andere möglichkeit gefunden , man kann ja ein button zum schließen defenieren und das habe ich gemacht und gut ist.
aber danke trotzdem für eure mühe.
liebe grüße
claudia
Eine Frage habe ich aber noch , habt ihr ein Beispiel wie ich an eine Auswahlbox eine Datenbanktabelle anknüpfen kann und diese dann als Diagramm ausgeben kann ?
Beispiel 5 Leute haben übers jahr so und so viel geraucht und das will ich dann als diagramm darstellen entweder alle zusammen oder jeder einzeln.
Th69 - Do 17.11.11 20:24
Hallo ramatus,
bitte erstelle für die neue Frage auch ein neues Thema, danke.
lothi - Do 01.12.11 14:51
Hallo
Vielleicht noch zum Ausgangsproblem wenn ich es richtig verstanden habe.
Wenn du ein Projekt erstellst, wird in der Main Methode automatisch das erstellte Form in der Nachrichtenschleife geöffnet:
C#-Quelltext
1: 2: 3: 4: 5:
| public static void Main() { Application.Run(new MyForm());
} |
Schliesst du nun das Formular wird auch die Nachrichtenschleife beendet und schwups wird alles geschlossen. Also muss das Anzeige Formular da raus.
Gruss Lothi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!