如何打开Childform子窗体且保留之前修改的内容?
问题原因
每次点击按钮时,你都创建了一个全新的FormRoom实例,之前修改的内容属于上一次创建的旧实例(该实例可能已被销毁或从面板中移除),新实例会以默认初始化状态显示,所以修改内容丢失。
解决方法
在MainForm中维护一个FormRoom的成员变量,复用已创建的实例而非每次新建。具体步骤如下:
- 在MainForm类的私有区域声明成员变量,用于保存子窗体实例:
private FormRoom _roomForm;
- 修改按钮点击事件的处理逻辑,判断实例是否存在或已被释放,按需复用或重建:
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
相关产品推荐
相关产品推荐

