C# (winforms) 异常中两个窗体之间的交互
本文关键字:窗体 之间 两个 交互 winforms 异常 | 更新日期: 2023-09-27 18:31:00
我正在开发一个WinForm应用程序。我有两个表单,form1 是主窗口,form2 用于设置。我正在使用此方法进行两种表单之间的交互:
表单 1 中的代码:
private void startForm2_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this);
frm.Show();
}
public void changeFontSize() //promenq razmera na shrifta
{
...
}
表单 2 中的代码:
Form1 F1 = new Form1();
public Form2(Form1 aF1)
{
InitializeComponent();
F1 = aF1;
}
private void button1_Click(object sender, EventArgs e)
{
F1.changeFontSize();
}
当我关闭form2时,它会引发异常:
无法访问已释放的对象。对象名称:"图标"。
在行
protected override void Dispose(bool disposing)
{
ChangeClipboardChain(this.Handle, nextClipboardViewer); // Clean up any resources being used.
...
在 Form1.Designer.cs 文件中。
Form F1 = new Form1();
字段应该只是Form F1;
。现在,您正在创建一个根本不使用的新Form1
实例(您覆盖构造函数中的字段),并且GC将不确定地释放和收集该实例。
这个"隐藏"实例很可能是在被释放时产生问题的实例。
您也可以尝试在 Form.FormClosed
事件处理程序中移动该方法,尽管它似乎更适合Dispose
方法。
您应该在 Form2 关闭事件上释放所有资源。