我有一個MDI窗體和一些子窗口。我把孩子的窗戶停靠在MDI的不同區域,但是當每個窗體上的焦點都丟失時,其他停靠的窗體將重新排列,每一件事情都會爆炸。由於存在疑問混淆,我準備了一組圖像來顯示反應。MDI窗體對接子窗口
圖像1,之前單擊任何形式:
鏡像2,點擊W2後:
所不同的是,當最左側停靠的窗口獲得焦點,它會將其大小更改爲MDI窗口的右端,而不提及W1窗口。
我該如何解決這個問題?謝謝。
我有一個MDI窗體和一些子窗口。我把孩子的窗戶停靠在MDI的不同區域,但是當每個窗體上的焦點都丟失時,其他停靠的窗體將重新排列,每一件事情都會爆炸。由於存在疑問混淆,我準備了一組圖像來顯示反應。MDI窗體對接子窗口
圖像1,之前單擊任何形式:
鏡像2,點擊W2後:
所不同的是,當最左側停靠的窗口獲得焦點,它會將其大小更改爲MDI窗口的右端,而不提及W1窗口。
我該如何解決這個問題?謝謝。
您是否嘗試過修改子窗體(W2)的Resize方法的大小?
//something like this
private void W2_Resize(object sender, EventArgs e)
{
Size pSize = this.ClientSize;
// Resize the form
}
或者meybe使用Focus方法。 我不知道它是否會導致perfomence問題,但。
我沒有,但我認爲它會留在以前的風格。我會試一試。 – MahanGM 2012-01-07 15:49:16
還有另一個解決方案。一個非常快速的例子是:
現在創建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();
這是一個有點不同的方法,但它應該工作得很好。
感謝您在這麼長時間後的回覆。本月早些時候我研究了「Form.TopLevel」,並解決了這個問題。 – MahanGM 2013-01-22 14:39:56
酷豆。現在其他人可以看到他們是否有同樣的問題:)。 – 2013-01-22 14:50:24
MDI和對接是反對象,窗口模型強烈支持重疊的孩子。 20年前用戶擁有640 x 480分辨率的顯示器時產生了很多意義。使用像http://sourceforge.net/projects/dockpanelsuite/ – 2012-01-07 14:49:37
這樣的停靠庫我知道這不是正確的方法,但我想嘗試。我曾與dockpanelsuit合作過,這很棒,但我對自己的東西更加自在。感謝您的回覆。 – MahanGM 2012-01-07 15:51:46
更好的是,停止使用MDI。正如漢斯所說,它不是專爲對接而設計的,它會一路戰鬥。如果你想發明你自己的車輪,如果你放棄MDI風格並且只使用普通的對接兒童就會容易得多。 – 2012-01-07 15:53:54