Forum: PC-Programmierung Fenster öffnen wpf


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ilsa (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.