Forum: PC-Programmierung Fenster öffnen wpf


von Ilsa (Gast)


Lesenswert?

Hallo,

ich versuche, aus meinem Hauptfenster ein zweites Fenster in wpf zu 
öffnen. Um ein bereits geöffnetes Fenster nicht erneut zu öffnnen, 
versuche ich das (bislang erfolglos) zu behandeln.



1
public partial class MainWindow : Window
2
{
3
      HelpWindow newWindow = new HelpWindow();
4
5
6
       private void buttonHelp_Click(object sender, RoutedEventArgs e)
7
       {       
8
       if (newWindow.IsActive == false)
9
       {                 
10
          newWindow.Show();
11
       }
12
       else
13
       {
14
                
15
       }
16
}

Gut, das erste Mal wird das Fenster geöffnet. Sofern ich den Button 
betätige, wird es nicht nochmal geöffnet.
Wenn ich das Hilfsfenster jedoch schließe und den Button nochmal drücke,
erhalte ich die Fehlermeldung:

Visibility kann nicht festgelegt oder Show, ShowDialog oder 
WindowInteropHelper.EnsureHandle können nicht aufgerufen werden, nachdem 
ein Window geschlossen wurde.

Macht Sinn. Schließlich ist das Objekt "newWindow" vom Carbage Collector 
entfernt worden (?).

Wie geht man hier richtig vor?

von Borislav B. (boris_b)


Lesenswert?

Ilsa schrieb:
> Macht Sinn. Schließlich ist das Objekt "newWindow" vom Carbage Collector
> entfernt worden (?).

Da du ja noch eine Referenz auf das Fenster hältst, wird es NICHT vom GC 
entfernt. Dennoch kann man es nach dem Schließen nicht mehr verwenden, 
da hast du Recht.

Was du vermutlich tun solltest:
Registriere dich für das Schließ-Event des Fensters. Brich dort den 
Schließvorgang ab, und verstecke das Fenster statt dessen. So wird 
dieses nicht zerstört und kann wieder angezeigt werden.

: Bearbeitet durch User
von Halbhonk (Gast)


Lesenswert?

Man könnte auch ein komplett neues Fenster erzeugen, aber dann verliert 
man ohne weitere Maßnahmen natürlich den Zustand der Controls (z.B. die 
aktuelle Scrollposition eines Textes in "HelpWindow"). Der Weg, den 
Boris beschrieben hat, ist der einfachere und in diesem Fall sicher auch 
bessere.

von Ilsa (Gast)


Lesenswert?

Hallo Boris,

danke für Deinen Vorschlag.

Eine Frage zu Deinem Vorschlag: Wie kann ich den EventHandler
1
private void Window_Closed(object sender, EventArgs e)
2
        {
3
4
        }

meines Hilfe-Fensters im Hauptfenster abfragen?

Ilsa

von Ilsa (Gast)


Lesenswert?

"Window_Closing" wäre wohl die richtige Wahl, um das Fenster-Schließen 
zu unterbinden ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.