c#关闭子窗体释放所有资源,关闭子窗体同时关闭主窗体

https://blog.csdn.net/shigzhu/article/details/128822652
首先感谢这个答主的贡献。
大家可以参考这个答主的方法,经过我测试一类方法是可用的,因为够我用了后面就没再看,大概率也是对的

(1)一类方法:在主窗体中创建静态字段

public static Form1 form;

public Form1()

{

	form = this;
	
	InitializeComponent();

}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)

{

	Form1.form.Close();

}

(2)二类方法:在入口中创建静态字段

static class Program

{

	public static Form1 form;
	
	///
	
	/// 应用程序的主入口点。
	
	///
	
	[STAThread]
	
	static void Main()
	
	{
	
		form = new Form1();
		
		Application.EnableVisualStyles();
		
		Application.SetCompatibleTextRenderingDefault(false);
		
		Application.Run(form);
	
	}

}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)

{

	Program.form.Close();

}

方案二:委托——调用方法的引用

如果方案一是调用对象的引用从而间接地调用到对象中对应的方法,那么可不可以直接通过调用方法的引用从而直接得到对应的方法呢?答案是可行的,即把主窗体A当中的Close方法委托给C,让子窗体B在自己的Close方法中调用C(A对应方法的引用)即可完成调用主窗体A中的对应Close方法。

(1)一类方法:自定义委托

①在主窗体中定义一个无返回值无参数的委托。和类平级,定义在类的外部。

//定义委托

public delegate void CloseEventHandler();

②在主窗体中定义对应的Close方法(该方法的返回值、参数类型和委托对应相同)。

public void FormClose()

{

	this.Close();

}

③在子窗体的类里面定义一个委托变量。

public CloseEventHandler closeEventHandler;

④子窗体实例化的同时给子窗体中对应的委托变量赋值主窗体中Close方法的引用。

private void button1_Click(object sender, EventArgs e)

{

	Form2 form = new Form2();
	
	form.closeEventHandler = FormClose;
	
	form.Show();

}

⑤此时在子窗体中调用自己的委托即可调用到主窗体中对应的Close方法

private void Form2_FormClosed(object sender, FormClosedEventArgs e)

{

	if (closeEventHandler != null)
	
	{
	
		closeEventHandler.Invoke();
	
	//简写
	
	//closeEventHandler();
	
	}

//简写

//closeEventHandler?.Invoke();

}

(2)二类方法:委托事件

上述一类方法中的委托也可以完全用系统自带的事件来解决。子窗体在关闭时会触发一个FormClosed事件,只需给这个事件添加一个关联的Close处理方法,在子窗体关闭的同时也会对应调用这个方法。

①主窗体中给FormClosed事件关联一个Close处理方法(方法如②)

private void button1_Click(object sender, EventArgs e)

{

	Form2 form = new Form2();
	
	form.FormClosed += new FormClosedEventHandler(FormClose);
	
	form.Show();

}

②主窗体中定义一个参数和FormClosedEventHandler委托事件相同的Close方法

public void FormClose(object sender,EventArgs e)

{

	this.Close();

}

————————————————
版权声明:本文为CSDN博主「shigzhu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shigzhu/article/details/128822652

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值