Benutzer mit den meisten Antworten
Startform schliessen - andere Form öffnen

Frage
-
Hallo an Alle,
Zunächst einmal die Problembeschreibung.
Das aktuelle Formular soll bei Klick auf einen Menüpunkt geschlossen und ein neues geöffnet werden.
Der Problemcode: (frmNeu ist die Klasse des zu öffnenden Formulares)
//internationalisiertes Formular, deshalb Übergabe der Sprache)
frmNeu fmNeu = new frmNeu(sprache) ; //neue Instanz
fmNeu.Show(); //Formular anzeigen
this.Close(); //alktuelles (altes) Formular schliessenProblembeschreibung:
Es werden leider beide Formulare geschlossen und die Anwendung komplett beendet.
Auch, wenn ich den Code in das Form_Closing Ereignis auslagere (ohne this.Close() ), bekomme ich das gleiche Ergebnis.Frage:
Wo ist der Fehler? Wie kann ich das neue öffnen und das alte schliessen?Danke schonmal im voraus!
Ralf
Ergänzung am 26.09.11 : Offenbar scheint das mit Startformularen generell nicht möglich zu sein. Ist diese Vermutung richtig?- Bearbeitet Ralf A Montag, 26. September 2011 13:18
Antworten
-
Hallo Christoph,
erstmal Entschuldigung, dass ich mich erst jetzt melde, war einige Tage weg. Trotzdem Danke für Deine Antwort!
An das Verstecken hatte ich auch schon gedacht. Das Wechseln der Sprache für alle anderen Forms ist ja weiter kein Problem. Allerdings ist es halt sehr unschön, wenn ausgerechnet die Form (die Hauptform eben), in der die Änderungen vorgenommen werden, nicht auf diese Änderungen reagiert... seufz... Mir fällt da auf die Schnelle eigentlich nur ein sehr unschöner Ansatz ein, die Hauptform verstecken (wie gehabt) und bei jedem Neuaufruf eine neue Instanz erstellen und anzeigen lasen. Ich hatte gehofft, das liesse sich eleganter lösen...
Nochmal Danke für Deine Mühe!
Ralf
- Als Antwort markiert Ralf A Donnerstag, 6. Oktober 2011 20:27
Alle Antworten
-
Hallo Ralf,
Deine Vermutung ist erstmal richtig, die initial aufgerufene Form kann nicht einfach beendet werden.
Wenn Du Dir mal die Program.cs anschaust wird das deutlich. Hier wird die erste anzuzeigende Form angegeben:
[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MeineHauptform()); }
Das bedeutet, sowohl die Nachrichtenverwaltung als auch der Hauptthread an der ersten Form hängen. Beendest Du diese nun mit this.Close(), dann endet der Thread und auch alle anderen Forms.Für Dein Problem sehe ich auf die Schnelle zwei Lösungsansätze:
1. Lokalisiere Deine Forms, so dass du zur Laufzeit einfach die Sprache wechseln kannst
2. "Verstecke" Deine Hauptform:
private void VersteckDich() { this.Visible = false; this.ShowInTaskbar = false; }
Dann kannst Du beliebig viele andere Forms anzeigen etc. Wichtig aber: Die Hauptform ist immer noch vorhanden!
Hoffe das hilft Dir erstmal...
-
Hallo Christoph,
erstmal Entschuldigung, dass ich mich erst jetzt melde, war einige Tage weg. Trotzdem Danke für Deine Antwort!
An das Verstecken hatte ich auch schon gedacht. Das Wechseln der Sprache für alle anderen Forms ist ja weiter kein Problem. Allerdings ist es halt sehr unschön, wenn ausgerechnet die Form (die Hauptform eben), in der die Änderungen vorgenommen werden, nicht auf diese Änderungen reagiert... seufz... Mir fällt da auf die Schnelle eigentlich nur ein sehr unschöner Ansatz ein, die Hauptform verstecken (wie gehabt) und bei jedem Neuaufruf eine neue Instanz erstellen und anzeigen lasen. Ich hatte gehofft, das liesse sich eleganter lösen...
Nochmal Danke für Deine Mühe!
Ralf
- Als Antwort markiert Ralf A Donnerstag, 6. Oktober 2011 20:27