0

我有一个 MDI 父级,其中包含许多最大化的 MDI 子级。

我阻止 MDI 父级使用以下代码关闭:

private void OnMainFormFormClosing(...)
{
    if (e.CloseReason == CloseReason.UserClosing)
    {
        e.Cancel = true;
        // Minimize to taskbar
        this.WindowState = FormWindowState.Minimized;
    }
}

然后我使用以下代码从任务栏中最大化它:

private void OnOpenToolStripMenuItemClick(...)
{
    // Maximize it from taskbar
    this.WindowState = FormWindowState.Maximized;
}

问题- 从任务栏恢复 MDI 表单后,Application.OpenForms集合为空。我怎么能重新填充它?非常感谢。

4

1 回答 1

5

那不是导致问题的代码。找到它的最佳方法是将此代码粘贴到您的表单类中:

    protected override void OnHandleCreated(EventArgs e) {
        base.OnHandleCreated(e);
    }

并在上面设置断点。它将在第一次创建表单窗口时出现。当它再次命中时,查看调试器的调用堆栈窗口。您将看到导致重新创建本机窗口的属性分配。

否则,这是一个未解决的 Winforms 错误,某些属性很困难,因为它们是本机 CreateWindowEx() winapi 函数中的样式标志。更改样式标志需要重新创建本机窗口。此类属性的示例是 Opacity 和 ShowInTaskbar。这工作得相当好,但是当窗口被破坏时,Application 类会丢失对表单实例的跟踪。解决方法是避免更改该属性或停止依赖 Application.OpenForms。

于 2013-06-14T21:59:05.090 回答