关闭背景中的窗口

时间:2016-05-14 20:59:55

标签: c# winforms

我正在开展一个学校项目,主要任务是在WinForms中创建一个简单的Tic-Tac-Toe应用程序。

如果你赢了游戏,会弹出一个小动画,说“玩家XY”赢了。通常情况下,用户会点击窗口,但我想关闭它,即使玩家打开它并点击“新游戏”。

这就是我的问题所在:如果你没有点击窗口并点击另一个窗口上的“新游戏”,那么现在已打开但在游戏区域后面的动画将不会关闭。

这是“新游戏”按钮的一些代码:

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

这是Winscreen内的代码:

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

因此函数被调用,但它不会关闭Window。我还尝试this.Close();Environment.Exit(0);来检查函数是否被正确调用,并且确实调用了函数。

1 个答案:

答案 0 :(得分:2)

您需要主窗体中的字段:

private Winscreen winscreen = null;

当您向用户显示窗口时,请将实例分配给此变量:

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

这样,您就可以将引用存储到屏幕上实际显示的窗口中。在当前的解决方案中,您每次都在创建一个新实例 - 每个实例都与之前打开的窗口无关。

然后在开始新游戏时,您可以关闭弹出窗口:

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

// ...
}

正如Steve在下面的评论部分中指出的那样,您还应该处理用户自行关闭窗口的情况。使用事件处理程序很容易。我将把它作为读者的练习;)