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

C# 多次点击按钮时如何避免重复打开多个Form2窗口

解决方案

实现思路

当前代码每次点击都会直接创建新的Form2实例,没有对旧实例做关闭处理,因此只需要在当前窗体中维护Form2的实例引用,每次点击按钮时先判断是否存在未关闭的旧实例,存在则先关闭,再创建新实例打开即可。

具体实现步骤

  • 第一步:在按钮所在的主窗体类中,声明一个Form2类型的私有成员变量,用于存储已打开的Form2实例引用
// 主窗体类内的成员变量声明
private Form2 _form2Instance = null;
  • 第二步:修改按钮点击事件的逻辑,先处理旧实例再创建新实例
private void Button_Click_1(object sender, EventArgs e)
{
    // 判断是否存在未关闭的旧实例
    if (_form2Instance != null && !_form2Instance.IsDisposed)
    {
        // 关闭已有实例
        _form2Instance.Close();
        // 手动释放资源
        _form2Instance.Dispose();
    }

    // 创建全新的Form2实例
    _form2Instance = new Form2();
    // 打开新窗口
    _form2Instance.Show();
}

可选优化方案

如果你不需要每次都打开全新的Form2,只是要保证仅保留一个窗口,也可以选择复用已有实例,将已打开的窗口调到前台即可:

private void Button_Click_1(object sender, EventArgs e)
{
    if (_form2Instance == null || _form2Instance.IsDisposed)
    {
        _form2Instance = new Form2();
        _form2Instance.Show();
    }
    else
    {
        // 将已打开的窗口调到前台激活
        _form2Instance.Activate();
        // 若窗口处于最小化状态则恢复正常显示
        if (_form2Instance.WindowState == FormWindowState.Minimized)
        {
            _form2Instance.WindowState = FormWindowState.Normal;
        }
    }
}

内容的提问来源于stack exchange,提问作者Bitpoison

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:00