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

如何打开Childform子窗体且保留之前修改的内容?

问题原因

每次点击按钮时,你都创建了一个全新的FormRoom实例,之前修改的内容属于上一次创建的旧实例(该实例可能已被销毁或从面板中移除),新实例会以默认初始化状态显示,所以修改内容丢失。

解决方法

在MainForm中维护一个FormRoom的成员变量,复用已创建的实例而非每次新建。具体步骤如下:

  1. 在MainForm类的私有区域声明成员变量,用于保存子窗体实例:
private FormRoom _roomForm;
  1. 修改按钮点击事件的处理逻辑,判断实例是否存在或已被释放,按需复用或重建:
private void btnRoom_Click(object sender, EventArgs e)
{
    // 实例未创建或已被销毁时,重新初始化
    if (_roomForm == null || _roomForm.IsDisposed)
    {
        _roomForm = new FormRoom();
        _roomForm.TopLevel = false;
        _roomForm.FormBorderStyle = FormBorderStyle.None;
        _roomForm.Dock = DockStyle.Fill;
    }

    // 先移除实例当前所在的父容器(避免重复添加控件)
    if (_roomForm.Parent != null)
    {
        _roomForm.Parent.Controls.Remove(_roomForm);
    }

    // 将实例添加到目标面板并显示
    panelDesktopPanel.Controls.Add(_roomForm);
    _roomForm.BringToFront();
    _roomForm.Show();

    ActivateButton(sender);
    lblTitle.Text = _roomForm.Text;
}
说明

这样处理后,第一次点击按钮会创建FormRoom实例并初始化,后续点击会复用已存在的实例,之前在子窗体中做的修改会被保留。如果需要在关闭子窗体后下次打开恢复默认状态,可在销毁实例时将_roomForm置为null,下次点击会重新创建新实例。

内容的提问来源于stack exchange,提问作者Hoàng Nghĩa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:30:18