C# 卸载和加载窗体/隐藏和关闭

标签 c# winforms hide show

我正在使用 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/

相关文章:

.net - 当控件增长时如何使表单垂直和水平调整大小?

c# - 将强类型列表添加到数据库

c# - 在 Metro 应用程序中获取 DNS 后缀搜索列表

.net - 使程序不可最小化

c# - 删除 ListView 中的项目

jQuery on click $(document) - 获取被点击的元素

jquery - jquery .show() 的 z-index 问题

javascript - Shiny :使用隐藏标签启动应用程序,没有延迟

c# - IBM Websphere MQ 客户端使用 SSL 连接远程队列

c# - 遍历注册表项