我有一个包含许多最大化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
集合为空。我怎么能重新填充它?非常感谢。
答案 0 :(得分:5)
这不是引起问题的代码。找到它的最好方法是将此代码粘贴到表单类中:
protected override void OnHandleCreated(EventArgs e) {
base.OnHandleCreated(e);
}
并设置断点。它将在第一次创建表单窗口时触发。当它再次命中时,请查看调试器的Call Stack窗口。您将看到导致重新创建本机窗口的属性分配。
这是一个未解决的Winforms错误,一些属性很难,因为它们是原生CreateWindowEx()winapi函数中的样式标志。更改样式标志需要重新创建本机窗口。此类属性的示例是Opacity和ShowInTaskbar。这很好用,但是当窗口被销毁时,Application类会丢失对表单实例的跟踪。解决方法是避免更改该属性或停止依赖Application.OpenForms。