2011-07-29 27 views
1

我正在研究一個應用程序,其中我必須顯示不同的表單堆疊在一起。由於一些限制,我不能使用MDI,也存在很多問題。制定一個標準格式爲MDI

我能夠得到我想要的,但有一個問題。表格將被堆疊,但它們不會保留在父表格中。 讓我們舉一個例子。結構是這樣的。 1)有一個表單A(我的父表單) 2)第二個表單「B」在表單「A」上的按鈕點擊事件時打開。 (注意:B.ShowInTaskBar = False) 3)再次,窗體「B」上的按鈕單擊事件打開第三個窗體「C」。 (注:C.ShowInTaskBar =假)

現在,當我最小化形式的,它就會被最小化,但窗體B和C,保持原樣。我希望他們在同一時間最小化。我想B型和C應該保持形式A.

的子窗體如何獲取。

+0

什麼限制,禁止使用的MDI形式?試圖自己改造MDI表格似乎沒有必要。 – Mike

+0

1)表單B和C必須像FormborderStyle = None。 2)我無法一個一個地顯示一堆表格。打開時,它們的大小會是這樣的。 B.Size = A.Size - 40 C.Size = B.Size -40 –

+0

一個沒有邊界,需要留在裏面其父是著名作爲一個用戶控件的UI小工具。 TabControl方便用戶在它們之間切換。 –

回答

3

只需使用MDI表格。對於MDI兒童,FormBorderStyle的價值沒有任何技術限制。請記住,在IsMdiContainer屬性設置爲true父窗體,然後將子窗體的MdiParent屬性設置爲父窗體Show()被調用之前。

編輯: 我不完全相信你通過堆疊的意思。您可以輕鬆地控制孩子的位置,如果這是你的意思:

public void ShowChildren() 
{ 
    Child child1 = new Child(); 
    Child child2 = new Child(); 

    child1.MdiParent = this; 
    child2.MdiParent = this; 

    child1.Show(); 
    child2.Show(); 

    child1.Size = new System.Drawing.Size(100, 100); 
    child1.Location = new System.Drawing.Point(0, 0); 
    child2.Size = new System.Drawing.Size(100, 100); 
    child2.Location = new System.Drawing.Point(0, 100); 
} 

編輯#2: 你們是不是要嵌套形式?如果是這樣,您可以使父母成爲正常形式,並在父母中放置UserControl A.然後將UserControl B放在UserControl A.允許用戶移動這些變得更加困難,但是如果您已經不需要邊框,這對您來說可能不是問題。

+0

當我使用MDI時,我無法堆疊其他表格。 –

+0

這不會限制第二種形式。 我的第三種形式應該始終位於第二位,應該位於第一位。 此外,只有最頂端的窗體應該是可點擊的。 感謝您試用Mike。 –

-1
public void formMain_buttonShowA_click() { 
    FormA formA = new FormA(); 
    formA.ShowDialog(); 
} 

public void formA_buttonShowB_click() { 
    FormB formB = new FormB(); 
    formB.ShowDialog(); 
} 
+0

這個答案只包含代碼,雖然它可能回答問題的「做什麼」部分,但並未詳細說明使用此解決方案的「原因,方式和時間」。如果你有時間和願望,那麼請給你的高質量崗位添加一些解釋,代碼和參考解釋都會更加有用,並且通常會被更頻繁地提升。有關更多提示,請參閱http://stackoverflow.com/help/how-to-answer。 –

+0

另外,你確定你的代碼在這種情況下會有幫助嗎?每一種形式都會創造出另一種形式,反過來又會形成新的第一種形式,所以我不確定它會對OP的形勢有所幫助。 –