我正在使用 Windows 窗体应用程序在 C# 中编写一个简单的 sidescroller。我希望它能在玩家触摸导出点时立即加载一个新关卡。
为了实现这一点,我使用了以下代码:
if (player.Bounds.IntersectsWith(exit.Bounds))
{
Form2 myNewForm = new Form2();
myNewForm.Visible = true;
this.Hide();
}
这行得通。但是,它加载了许多 form2 实例——我只希望它加载一次。我不知道怎么写这个(抱歉,我是新手 - 光是写这段代码就花了我一段时间!)。
此外,通过新表单加载关卡效率低下。有没有办法卸载打开的表单以在同一窗口/实例中加载下一个表单,而不是创建另一个单独的窗口?
抱歉,如果不清楚。我已经做了我最好的研究+我是新来的。请不要提及 XNA!谢谢。
最佳答案
您需要对项目的 Program.cs 文件进行少量修改,以更改您的应用决定终止的方式。当没有更多窗口时,您可以简单地退出。让它看起来像这样:
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var start = new Form1();
start.FormClosed += WindowClosed;
start.Show();
Application.Run();
}
static void WindowClosed(object sender, FormClosedEventArgs e) {
if (Application.OpenForms.Count == 0) Application.Exit();
else Application.OpenForms[0].FormClosed += WindowClosed;
}
}
现在很简单:
if (player.Bounds.IntersectsWith(exit.Bounds))
{
new Form2().Show();
this.Close();
}
关于C# 卸载和加载窗体/隐藏和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27967212/