You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Visual Studio的C#项目中如何切换已打开Form而不新建实例?

问题1:从Form2切换回已打开的Form1实例

方案1:在Form2中持有Form1的引用

打开Form2时,将当前Form1的实例传递过去,后续直接复用该实例:

// Form1中打开Form2的代码
private void OpenForm2Btn_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2(this);
    form2.Show();
    this.Hide(); // 隐藏而非关闭Form1
}

在Form2中保存引用,切换时直接显示原实例:

private Form1 _originalForm1;
public Form2(Form1 form1Instance)
{
    InitializeComponent();
    _originalForm1 = form1Instance;
}

// Form2中返回Form1的按钮事件
private void BackToForm1Btn_Click(object sender, EventArgs e)
{
    _originalForm1.Show();
    this.Hide(); // 可根据需求选择关闭或隐藏Form2
}

方案2:通过已打开窗体集合查找实例

如果不想传递引用,可遍历应用程序的已打开窗体集合:

// Form2中返回Form1的代码
private void BackToForm1Btn_Click(object sender, EventArgs e)
{
    Form1 existingForm1 = Application.OpenForms.OfType<Form1>().FirstOrDefault();
    if (existingForm1 != null)
    {
        existingForm1.Show();
        this.Hide();
    }
}

问题2:回到最初打开的游戏页面

核心逻辑:复用初始游戏页面实例,避免新建

  1. 菜单弹窗与游戏界面切换
    弹出菜单时仅隐藏游戏界面,弹窗关闭后重新显示:
// 游戏页面打开菜单弹窗的代码
private void OpenMenuBtn_Click(object sender, EventArgs e)
{
    MenuPopup menuPopup = new MenuPopup();
    menuPopup.FormClosed += (s, args) => this.Show();
    this.Hide();
    menuPopup.Show();
}
  1. 游戏结束后重置状态而非新建页面
    游戏结束时不关闭页面,仅重置所有游戏状态(分数、角色位置、关卡等),点击开始菜单时恢复初始状态:
// 游戏页面的状态重置方法
private void ResetGameState()
{
    score = 0;
    playerPosition = new Point(100, 100);
    currentLevel = 1;
    UpdateGameUI(); // 刷新界面显示
}

// 游戏结束后点击开始菜单的事件
private void RestartGameBtn_Click(object sender, EventArgs e)
{
    ResetGameState();
    this.Show();
}

注意:全程不要销毁初始游戏页面实例,仅通过Hide()/Show()控制显示,重置状态即可回到初始游戏场景。

内容的提问来源于stack exchange,提问作者Beyza Nur Gültekin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:50:03