2013-07-31 45 views
19

我使用C#創建Windows窗體應用程序。如何在win應用程序中加載窗體內部其他窗體

我有一個一般的表格和麪板上。

我秀子窗體到這個面板代碼:

SubForm objForm= SubForm.InstanceForm(); 
this.IsMdiContainer = true; 
objForm.TopLevel = false; 
pnlSubSystem.Controls.Add(objForm); 
objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
objForm.Dock = DockStyle.Fill; 
objForm.Show(); 

現在我想告訴這個面板的子窗體其他形式的,但我不知道該怎麼做。

+3

當您這樣做時,將IsMdiContainer設置爲true沒有意義。如果您希望在該面板中顯示另一個表單,則由您來設置「大小」和「位置」屬性。您無法獲取表單可能重疊的MDI行爲。 –

回答

20

我想通過這個代碼解決您的問題:

SubForm objForm= SubForm.InstanceForm(); 
    objForm.TopLevel = false; 
    pnlSubSystem.Controls.Add(objForm); 
    objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
    objForm.Dock = DockStyle.Fill; 
    objForm.Show(); 
3

據我所知,你非常接近。要添加其他形式進入subform嘗試同樣的代碼,而不是:

pnlSubSystem.Controls.Add(objForm); 

使用(其中objForm2是新subForm

SubForm objForm2 = new SubForm(); 
objForm.Controls.Add(objForm2); 
3

既然你已經得到了答案,通過刪除this.IsMdiContainer = true;你的代碼將運行得很好。因爲IsMdiContainer屬性將窗體的顯示和行爲更改爲MDI父窗體。當此屬性設置爲true時,表單將顯示一個被淹沒的客戶區域。所有分配給父表單的MDI子表單都顯示在其客戶區中。

SubForm objForm= SubForm.InstanceForm(); 
objForm.TopLevel = false; 
pnlSubSystem.Controls.Add(objForm); 
objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
objForm.Dock = DockStyle.Fill; 
objForm.Show(); 

objForm表單將成爲子表單的模板。每次您要爲應用程序創建一個新的子窗口時,都可以創建此模板窗體的一個新實例,並將第一個窗體作爲其父窗體。

//Create a new instance of the MDI child template form 
SubForm objForm = new SubForm(); 
//Set parent form for the child window 
objForm.MdiParent=this; // Last ObjForm or something 
//Display the child window 
objForm.Show(); 
0

另一種方式:

objForm.TopLevel = false; 
objForm.Parent = pnlSubSystem; 
objForm.Show(); 

這是我的#2的第一個答案。

相關問題