C# 每次都触发用户控件负载

C# 每次都触发用户控件负载,c#,user-controls,mdi,C#,User Controls,Mdi,我有一个usercontrol,它正在MDI子级中使用。通过执行此操作,我正在更改MDI子对象关闭时的可见性 private void MDIChild_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Visible = false; } 但是,当我将MDI表单的可见性更改为true时,即使没有触发表单加载,也会触发用户控件加载事件。但是,对于普通windows窗体,这种情况不

我有一个usercontrol,它正在MDI子级中使用。通过执行此操作,我正在更改MDI子对象关闭时的可见性

private void MDIChild_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    this.Visible = false;
}
但是,当我将MDI表单的可见性更改为true时,即使没有触发表单加载,也会触发用户控件加载事件。但是,对于普通windows窗体,这种情况不会发生

基本上,在某些情况下,我需要禁用MDI子对象的关闭功能


你知道怎么做吗?

来自该活动的MSDN文档

如果UserControl是MDI子窗体的一部分,则加载事件将 每次显示子窗体时发生。在这种情况下,您应该 UserControl中的任何一次性初始化代码,而不是加载 事件处理程序


因此,当您显示MDI表单时,满足此条件。这意味着,在本例中,如果用户控件依赖于加载事件,相反,您应该将其移动到另一个方法,并在显示MDI表单时显式调用该方法。

但是为什么即使表单关闭事件被取消,用户控件的Handle\u Destroyed事件也可以被触发检查对usercontrol的引用是否超出范围-这就是调用Handle\u Destroyed的典型原因。