【问题标题】:User control load fired everytime每次触发用户控制负载
【发布时间】:2012-10-17 09:16:27
【问题描述】:

我有一个在 MDI 子级内部使用的用户控件。通过这样做,我正在更改该 MDI 子项的可见性。

private void MDIChild_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    this.Visible = false;
}

但是当我将 MDI 表单的可见性更改为 true 时,即使没有触发表单加载,也会触发用户控件加载事件。但是在普通的 windows 窗体中不会发生这种情况。

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

知道怎么做吗?

【问题讨论】:

    标签: c# user-controls mdi


    【解决方案1】:

    来自UserControl Load 事件的 MSDN 文档

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

    因此,当您显示 MDI 表单时,就满足了此条件。这意味着,在这种情况下,如果您依赖 UserControl 的 Load 事件,则应将其移至另一个方法并在显示 MDI 表单时显式调用该方法。

    【讨论】:

    • 但是即使 Form_Closing 事件被取消,为什么用户控件的 Handle_Destroyed 事件也会被触发
    • 检查对 usercontrol 的引用是否超出范围 - 这通常是调用 handle_destroyed 的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多