C# 关闭子窗体释放子窗体对象问题

该博客主要围绕C#中主窗口与子窗口的操作展开,介绍了在主窗口中实例化子窗口、通过按钮显示子窗口的方法,还提及关闭子窗口而不释放对象以及在父窗口关闭时销毁子窗口对象的方式,并给出相关代码示例及参考出处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 在主窗口中实例化子窗口

Form2 f2 = new Form2();

2 通过按钮来显示子窗口

f2.Show();

3 关闭子窗口而不释放子窗口对象的方法

protected override void Dispose(bool disposing)
        {
            Hide();
            //if (disposing && (components != null))
            //{
            //    components.Dispose();
            //}
            //base.Dispose(disposing);
        }
(注意:在子窗口Designer文件中修改)

4 在父窗口关闭时销毁子窗口对象

  子窗口类中添加的关闭函数如下:

public void Close()
        {

            this.Dispose();

        }

父窗口关闭是销毁子窗口对象,因此,在父窗口的关闭动作FormClosed中添加调用子窗口f2的销毁函数。
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            f2.Close();
        }  

===================================================================================

另外还有一种方式:

子窗体定义一个委托,父窗体实例化子窗体时注册子窗体的委托事件(具体功能是实现父窗口的控件变化),子窗体关闭时调用事件方法。
  
父窗体
public void ShowPopWindow()
{
TestA sub = new TestA();
sub.CloseWindow += new Action(sub_CloseWindow);
sub.show();
}

void sub_CloseWindow()
{
//改变父窗体控件内容
}

子窗体
public class TestA
{
public event Action CloseWindow;

protected virtual void OnCloseWindow()
{
Action handler = CloseWindow;
if (handler != null) handler();
}

//子窗体关闭事件
private void CloseSubWindow()
{
OnCloseWindow();
}
}

出处:https://zhidao.baidu.com/question/134623114688436765.html

========================================================================

转载于:https://www.cnblogs.com/XuPengLB/p/9560574.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值