所以,我正在做一个小游戏。 " Game.cs"打开Win-Screen(" winscreen.cs")。 Winscreen让您能够创建新游戏。 Game.cs通过MainMenu打开。
如果您点击Winscreen上的New-Game按钮,它会打开一个新的Playfield:
private void winscreen_again_Click(object sender, EventArgs e)
{
Game loadGame = new Game();
loadGame.Show();
}
问题是:它打开了新的Playfield,而曾经通过MainMenu打开的旧Playfield保持打开状态。所以我尝试了loadGame.Close();
什么也没做。
我也尝试在我的Form1.cs(The MainMenu)中执行此操作:
public Game loadGame;
稍后再说:
this.loadGame = new Game();
this.loadGame.StartPosition = FormStartPosition.CenterScreen;
this.loadGame.Show();
要从Winscreen.cs关闭Window,我在Winscreen中做了这个:
Game.loadGame.Close();
因为那没有用,我做了
Game closeGame = new Game();
closeGame.loadGame.Close();
但这也不起作用,如果我将public Game loadGame;
设置为"静态" this.loadGame ......不再工作了。
那么如何通过我的Winscreen.cs关闭现有的Game.cs? 谢谢!
答案 0 :(得分:1)
public partial class Winscreen : Form
{
// Variable to catch the old playfield
Game oldPlayfield;
// the old playfield is passed in the constructor
public Winscreen(Game opf)
{
this.oldPlayfield = opf;
InitializeComponent();
}
private void winscreen_again_Click(object sender, EventArgs e)
{
Game loadGame = new Game();
loadGame.Show();
// close the old field
this.oldPlayfield.Close();
}
// rest of the class
}
在CheckWinner方法内的Game.cs
中,您可以像这样调用Winscreen:
//Shows the winner Animation and changes the Text to the Winning player
Winscreen loadWinscreen = new Winscreen(this);
不幸的是我现在无法测试它以验证它是否可行。
这也不是最干净的解决方案。
2.nd选项:
我建议使用布尔属性repeatGame
,当用户按下Winscreen.cs
按钮时,可以在winscreen_again
中设置为true。在Winscreen
内创建Game.cs
类型的属性,并在Closing
的构造函数中订阅Game
事件。
在事件处理程序中,您可以询问是否已设置repeatGame
标记,如果是,您可以清除游戏区并开始新游戏。