Winforms 我对表单感到困惑。Close()
因此,我将Form2中的委托链接到Form1中的这个函数,然后将Form3中的委托链接到Form2中的委托(正如我所说,它链接到Form1中的函数),但我感到困惑的是,尽管在创建Form3实例时Form2是关闭的,但它仍然工作。如果Form.Close()方法关闭Form2并对其进行处理,那么来自Form3的委托如何仍然可以调用来自Form2的函数(委托)Winforms 我对表单感到困惑。Close(),winforms,delegates,formclosing,Winforms,Delegates,Formclosing,因此,我将Form2中的委托链接到Form1中的这个函数,然后将Form3中的委托链接到Form2中的委托(正如我所说,它链接到Form1中的函数),但我感到困惑的是,尽管在创建Form3实例时Form2是关闭的,但它仍然工作。如果Form.Close()方法关闭Form2并对其进行处理,那么来自Form3的委托如何仍然可以调用来自Form2的函数(委托) namespace TestingMachine { public delegate void FxDele
namespace TestingMachine
{
public delegate void FxDelegate();
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Form2 fr2 = new Form2();
fr2.Delegate_Father_Hide = new FxDelegate(This_Hide);
fr2.Show();
}
public void This_Hide()
{
this.Hide();
}
}
}
namespace TestingMachine
{
public partial class Form2 : Form
{
public FxDelegate Delegate_Father_Hide;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Form3 fr3 = new Form3();
fr3.Delegate_Hide_Grandfather = new FxDelegate(Hide_Grandfather);
fr3.Show();
this.Close();
}
public void Hide_Grandfather()
{
Delegate_Father_Hide();
}
}
}
namespace TestingMachine
{
public partial class Form3 : Form
{
public FxDelegate Delegate_Hide_Grandfather;
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Delegate_Hide_Grandfather();
}
}
}
处理表单会清理正在使用的资源。但是,通过将回调方法
Hide\u-grander
附加到委托delegate\u-Hide\u-grander
,Form3
对象持有对Form2
对象的引用,因此无法将其标记为GC清理,该对象将保留在内存中并工作(取决于您在内存中的操作)。但我建议清理代码。处理表单会清理正在使用的资源。但是,通过将回调方法Hide\u-grander
附加到委托delegate\u-Hide\u-grander
,Form3
对象持有对Form2
对象的引用,因此无法将其标记为GC清理,该对象将保留在内存中并工作(取决于您在内存中的操作)。但是我建议清理你的代码。