2016-05-14 17 views
3

Ich arbeite gerade an einem Schulprojekt, die Hauptaufgabe besteht darin, eine einfache Tic-Tac-Toe-Anwendung in WinForms zu erstellen.Schließen Sie ein Fenster, das im Hintergrund ist

Wenn Sie das Spiel gewonnen haben, erscheint eine kleine Animation, die besagt, dass "Player XY" gewonnen hat. Normalerweise würde der Benutzer das Fenster wegklicken, aber ich möchte es schließen, auch nachdem der Spieler es geöffnet hat und auf "Neues Spiel" geklickt hat.

Hier kommt mein Problem: Wenn du nicht auf das Fenster klickst und auf "Neues Spiel" in einem anderen Fenster klickst, wird die Animation, die jetzt geöffnet ist, aber hinter dem Spielfeld nicht geschlossen.

Dies ist ein Teil des Codes für die "New Game" Button:

private void New_Game_Click(object sender, EventArgs e) 
{ 
    Winscreen winscreenClose = new Winscreen(); 
    winscreenClose.CloseWinscreen(); 
} 

dies der Code innerhalb Winscreen ist:

public void CloseWinscreen() 
{ 
    this.Hide(); 
} 

So kann die Funktion aufgerufen wird, aber es funktioniert nicht schließe das Fenster. Ich versuchte auch this.Close(); und Environment.Exit(0); nur, um zu überprüfen, dass die Funktion ordnungsgemäß aufgerufen wird, und es tut.

+4

Sie erstellen eine neue Instanz und schließen sie dann sofort. Um den vorhandenen Bildschirmschoner zu schließen, müssen Sie das von Ihnen erstellte Instanzobjekt verwenden, um es anzuzeigen. – Plutonix

Antwort

2

Sie benötigen ein Feld in der Hauptform:

private Winscreen winscreen = null; 

Wenn Sie das Fenster für den Benutzer nun vorstellen, weisen die Instanz auf diese Variable:

this.winscreen = new Winscreen(); 
this.winscreen.Show(); // or whatever you're doing currently 

Auf diese Weise sind Sie in der Lage, eine Referenz zu dem Fenster zu speichern, das tatsächlich auf dem Bildschirm angezeigt wird. In Ihrer aktuellen Lösung erstellen Sie jedes Mal eine neue Instanz, von denen jede nichts mit dem zuvor geöffneten Fenster zu tun hat. Dann

, wenn ein neues Spiel starten können Sie das Popup schließen:

private void New_Game_Click(object sender, EventArgs e) 
{ 
    if (this.winscreen != null) 
    { 
     this.winscreen.CloseWinscreen(); 
     this.winscreen = null; 
    } 

// ... 
} 

Als Steve weisen darauf hin, in den Kommentaren unten, sollten Sie auch den Fall behandeln, wenn der Benutzer das Fenster von selbst schließen. Das ist einfach mit einem Event-Handler. Ich überlasse es als Übung für den Leser;)

+3

Sie sollten auch einen Event-Handler für das Closing-Ereignis auf dem Winscreen-Formular bereitstellen, falls der Benutzer das Formular korrekt schließt, anstatt auf die Schaltfläche für das neue Spiel zu klicken. Das Böse steckt im Detail .... – Steve

Verwandte Themen