C# mit Fenstern arbeiten

abdi-61

Lieutenant
Registriert
Okt. 2011
Beiträge
519
Hi,

ich hab ein proplem bei c# undzwar möchte ich zwischen 2 Fenstern hin und her switchen.
Also beim hauptfenster steht nun

Code:
namespace Testing
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Window1 w1 = new Window1();

        public MainWindow()
        {
            InitializeComponent();
           
        }



        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
            w1.Show();
        }
    }
}
dies funktioniert auch, beim klicken auf den button öffnet sich das 2 fenster.
Doch wenn ich versuche wieder auf das hauptfenster zu kommen gibt es immer einen fehler.
so sieht mein code im 2 fenster aus.

Code:
namespace Testing
{
    /// <summary>
    /// Interaktionslogik für Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        MainWindow mw1 = new MainWindow();

        public Window1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
            mw1.Show();
        }
    }
}

beim debuggen kommt folgender fehler

Eine nicht behandelte Ausnahme des Typs "System.StackOverflowException" ist in Testing.exe aufgetreten.

weiß einer villeicht wo der fehler liegt ?
danke
 
Naja beide Fenster erzeugen selbst wiederum ein neues Fenster des anderen Typs... A erzeugt B, B erzeugt A, das erzeugt B, das wieder ein A, ... endlos...

Edit: irgendwie hat grad mein Internet oder so gesponnen...
 
Zuletzt bearbeitet:
ne ich hab ja extra so gemacht das erst beim klicken das neue fenster erstellt wird.
 
@ 1668mib: Knapp daneben ist auch vorbei. ;) A erzeugt B und B erzeugt sich immer wieder neu.

@ TE: Wozu erstellst du in der Form die aktuelle Form neu? Gibts dafür einen besonderen Grund? Die Form existiert doch schon durch den Aufruf des MainWindows.
 
Ok gut, so genau hab ich es mir nicht angeschaut, langer Tag und so ;-)

Aber irgendwie denk ich immer noch, dass ich recht hab:
MainWindow mw1 = new MainWindow();
und
Window1 w1 = new Window1();

aber ist ja auch egal :-)
 
Naja habe am anfang ohne mehrere fenster gearbeitet und nun soll ich mit fenstern arbeiten.
Nun habe ich aber keine lust meinen ganzen code neu zu schreiben deswegen würde ich das gerne so machen das beim start die 2 seite direkt angezeigt wird und dan je nach klick auf den button weiter das hauptfenster erscheint.

hoffe das ist so verständlich^^
 
Oha, dann hab ich wohl einen Knick in der Optik gehabt... ;)
Ergänzung ()

Warum lässt du nicht das eine Fenster einfach offen und öffnest das zweite? Musst du das Eine öffnen und das Andere schließen oder einfach nur ein Zweites öffnen?
 
Natürlich ist das verständlich. Die Frage ist, ob die Fenster immer wieder neue erstellen müssen, und selbst wenn das so gewollt ist, reicht es, wenn die Fenster bei Bedarf nach dem Button-Click erstellt werden...

Aber vermutlich ist das auch gar nicht gewollt so...

Stattdessen reicht es, ein mal im MainWindow eine Window1-Instanz zu erstellen, und diese dann zu zeigen. Der Window1-Instanz wird halt dann mitgeteilt, welches Fenster es nach dem Schließen anzeigen soll... man könnte im Konstruktor das Eltern-Fenster als Parameter hinzufügen... oder oder oder... gibt viele Möglichkeiten...
 
ja die könnten ruig nachdem klick erstellt werden nur kenne ich funktion nicht mit der dies möglich ist.
 
Wieso? Du nutzst die Befehle zum Erstellen der Fenster ja schon... aber an der falschen Stelle halt...
 
hmm und wo müsste ich sie setzen.
Weil das proplem ist das programm starten ja garnicht eigendlich sollte das programm starten und nach jedem klick das fenster wechseln.
komisch ist auch das ich bei mehrern fenstern
von fenster 1->2->3 wechseln kann aber nie zurück also 1<->2<->3.
wenn ich aber den code im fenster 2 lösche funktioniert es.
Also das fenster 1 erscheint man klickt auf den button und das 2 fenster erscheint.
 
Bitte achte mehr auf deine Rechtschreibung. Es ist teils sehr schwer zu verstehen, was du uns überhaupt mitteilen willst.

Im Anhang habe ich ein VS2010-Projekt angehängt, in dem du sehen kannst, wie man es machen könnte. Der Trick ist, die Fenster nicht zu schließen (Close), denn dann verschwinden sie aus dem Speicher. Mit Hide() kannst du sie einfach ausblenden und musst sie nur wieder einblenden, wenn du sie brauchst.

Meine Lösung, statische Properties in der App-Klasse zu verwenden, ist zwar nicht ideal, aber es geht ja ums Prinzip. Und es sollte jetzt auch nur ein schnelles Beispiel sein. ;)
Ich persönlich würde jedem Fenster über den Konstruktor eine Liste zu allen initialisierten Fenster übergeben. Da pickt sich die Anwendung je nach Userinput ein passendes Fenster aus und lässt es anzeigen. Sollte das passende Fenster noch nicht in der Liste sein, dann erstellst du es einfach vor Ort und trägst es in die Liste ein. ;)
 

Anhänge

@e-Laurin

Danke :)
 
Oder man könnte eine Art "Fenster-Manager" einführen, eine Klasse, die die Fenster verwaltet... die Fenster müssen sich ja im Grunde gar nicht gegenseitig kennen, es reicht ja, wenn sie dem Fenster-Manager mitteilen "also neues Fenster wäre jetzt das nach mir..." u.ä.
 
Zurück
Oben