2012-01-07 158 views
1

我有一個MDI窗體和一些子窗口。我把孩子的窗戶停靠在MDI的不同區域,但是當每個窗體上的焦點都丟失時,其他停靠的窗體將重新排列,每一件事情都會爆炸。由於存在疑問混淆,我準備了一組圖像來顯示反應。MDI窗體對接子窗口

圖像1,之前單擊任何形式:

enter image description here

鏡像2,點擊W2後:

enter image description here

所不同的是,當最左側停靠的窗口獲得焦點,它會將其大小更改爲MDI窗口的右端,而不提及W1窗口。

我該如何解決這個問題?謝謝。

+0

MDI和對接是反對象,窗口模型強烈支持重疊的孩子。 20年前用戶擁有640 x 480分辨率的顯示器時產生了很多意義。使用像http://sourceforge.net/projects/dockpanelsuite/ – 2012-01-07 14:49:37

+0

這樣的停靠庫我知道這不是正確的方法,但我想嘗試。我曾與dockpanelsuit合作過,這很棒,但我對自己的東西更加自在。感謝您的回覆。 – MahanGM 2012-01-07 15:51:46

+0

更好的是,停止使用MDI。正如漢斯所說,它不是專爲對接而設計的,它會一路戰鬥。如果你想發明你自己的車輪,如果你放棄MDI風格並且只使用普通的對接兒童就會容易得多。 – 2012-01-07 15:53:54

回答

0

您是否嘗試過修改子窗體(W2)的Resize方法的大小?

//something like this 
    private void W2_Resize(object sender, EventArgs e) 
    { 
     Size pSize = this.ClientSize; 
     // Resize the form 
    } 

或者meybe使用Focus方法。 我不知道它是否會導致perfomence問題,但。

+0

我沒有,但我認爲它會留在以前的風格。我會試一試。 – MahanGM 2012-01-07 15:49:16

1

還有另一個解決方案。一個非常快速的例子是:

  • 創建一個新窗口窗體(Form1)。將其isMidiContainer屬性設置爲true。
  • 現在,在其上放置一個面板(Panel1)並將其浮動屬性設置爲右側,然後設置寬度。
  • 在窗體上放置另一個面板(panel2),並將其底座設置爲右側。現在這兩個面板彼此相鄰。

現在創建2個新的窗體窗體(窗體2和窗體3)。

現在,在Form1的主,只是下面的InitializeComponent(),添加:

Form2 f2 = new Form2(); 
f2.TopLevel = false; 
f2.Dock = DockStyle.Fill; 
panel1.Controls.Add(f2); 
f2.Show(); 

Form3 f3 = new Form3(); 
f3.TopLevel = false; 
f3.Dock = DockStyle.Fill; 
panel2.Controls.Add(f3); 
f3.Show(); 

這是一個有點不同的方法,但它應該工作得很好。

+0

感謝您在這麼長時間後的回覆。本月早些時候我研究了「Form.TopLevel」,並解決了這個問題。 – MahanGM 2013-01-22 14:39:56

+0

酷豆。現在其他人可以看到他們是否有同樣的問題:)。 – 2013-01-22 14:50:24