这听起来像是一项简单的任务,但我遇到了一些问题。
我的 C# 应用程序有一些相当简单的代码:
private void SwitchToSdi()
{
MainWindow mainWindow = GetMainWindow();
for (int index = mainWindow.MdiChildren.Length - 1; index >= 0; index--)
{
Form form = mainWindow.MdiChildren[index];
if (!(form is MainWindow))
{
form.Visible = false;
form.MdiParent = null;
form.Visible = true;
mainWindow.MdiChildren[index] = null;
}
}
mainWindow.IsMdiContainer = false;
}
接着,
private void SwitchToMdi()
{
MainWindow mainWindow = GetMainWindow();
mainWindow.IsMdiContainer = true;
for (int index = Application.OpenForms.Count - 1; index >= 0; index--)
{
Form form = Application.OpenForms[index];
if (!(form is MainWindow))
{
form.Visible = false;
form.MdiParent = mainWindow;
form.Visible = true;
}
}
}
请注意,MainWindow 是一个 MDI 父窗口,其 IsMdiContainer 属性设置为 True。
用户可以在选项对话框中在 MDI 和 SDI 之间切换。这么多工作很漂亮。如果我切换到 SDI,新窗口会在主窗口之外打开,这很棒。同样,如果我切换到 MDI,它们会在容器内打开。
不过,我注意到了一些事情。
打开的 MDI 子窗口不会像我预期的那样变成 SDI 窗口。
打开的 SDI 窗口不会像我预期的那样成为 MDI 子窗口。
即使在对 SwitchToMdi() 的调用中将 IsMdiContainer 设置为 true 之后,如果我尝试打开一个新窗口,我也会收到一个异常,告诉我主窗口不是 MDI 容器。o_O
有人请在这里给我一根骨头。这不应该是火箭科学。但是我在 Intarwebs 上找不到很多有用的帮助(阅读:g00gle 相当没用)。
以前有没有人在.NET 中实现过这种行为?你是怎么做到的?我在这里想念什么?哈!