這聽起來像是一個簡單的任務,但我遇到了一些問題。從MDI切換到SDI並再次返回
我有一些非常簡單的代碼爲我的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;
}
}
}
注意,主窗口是一個MDI父窗口,其IsMdiContainer屬性設置爲True。
用戶可以在選項對話框中切換MDI和SDI。這很好用。如果我切換到SDI,新的窗口在主窗口外面打開,這非常棒。同樣,如果我切換到MDI,它們在容器內部打開。
但是,我注意到了一些事情。
打開MDI子窗口不會像我預期的那樣變成SDI窗口。
打開SDI窗口不會像我預期的那樣變成MDI子窗口。
即使我在調用SwitchToMdi()時將IsMdiContainer設置爲true,如果我嘗試打開一個新窗口,我得到一個異常告訴我主窗口不是MDI容器。 o_O
有人請把我丟在這裏。這不應該是火箭科學。但我沒有在Intarwebs上找到很多有用的幫助(閱讀:g00gle是相當無用的)。
有沒有人在.NET中實現過這種行爲?你是怎麼做到的?我在這裏錯過了什麼? HALP!
哈哈 - 你說得對。這是一個蹩腳的答案。 :0)但這是順利。對於這種特殊的*類型的應用程序,有時候MDI非常有用,並且MDI突破時非常有用(想到多個監視器設置)。想想一下數據庫瀏覽器。 – 2009-11-18 16:07:33
出於好奇,我想知道*爲什麼*這是不可取的。是因爲用戶無法處理它,還是因爲工具/操作系統/某些問題?如果是用戶問題,我不認爲這會是一個問題。我的目標受衆不會是那些不知道如何在MDI和SDI之間進行交換的用戶。 – 2009-11-18 16:09:23
@Mike - 我挖掘了很多,試圖找出爲什麼這是不可取的,因爲我有一個MDI窗口的問題。雖然我從來沒有找到一個體面的答案。同時,我的問題是因爲與MDI完全沒有關係的愚蠢的遺漏。 – 2009-11-19 22:09:28