我正在开展一个学校项目,主要任务是在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);
来检查函数是否被正确调用,并且确实调用了函数。
答案 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在下面的评论部分中指出的那样,您还应该处理用户自行关闭窗口的情况。使用事件处理程序很容易。我将把它作为读者的练习;)