2013-07-31 49 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的第一个答案。

相关问题