我正在开发一个WinForm应用程序。 我有两种形式,form1是主窗口,form2是设置。 我正在使用这种方法在两种形式之间进行交互:
form1中的代码:
private void startForm2_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this);
frm.Show();
}
public void changeFontSize() //promenq razmera na shrifta
{
...
}
form2中的代码:
Form1 F1 = new Form1();
public Form2(Form1 aF1)
{
InitializeComponent();
F1 = aF1;
}
private void button1_Click(object sender, EventArgs e)
{
F1.changeFontSize();
}
当我关闭form2时,会抛出异常:
无法访问已处置的对象。对象名称:'Icon'。
在行
protected override void Dispose(bool disposing)
{
ChangeClipboardChain(this.Handle, nextClipboardViewer); // Clean up any resources being used.
...
在Form1.Designer.cs文件中。
答案 0 :(得分:1)
Form F1 = new Form1();
字段应为Form F1;
。现在,您正在创建一个根本不使用的新Form1
实例(您在构造函数中覆盖该字段),并且它将由GC非确定地处理和收集。
这个“隐藏”的实例最有可能是在处理时产生问题的实例。
您也可以尝试在Form.FormClosed
事件处理程序中移动该方法,尽管它似乎更适合Dispose
方法。
答案 1 :(得分:0)
您应该在Form2结束事件上处理所有资源。