【发布时间】:2011-06-24 05:44:24
【问题描述】:
我是 Visual Studio 2010 的新手,我正计划创建一个计时系统。我只是想问我如何创建一个包含 2 个表单的表单。例如,如果我单击一个按钮,它将在表单中打开一个新表单。请帮忙。谢谢
【问题讨论】:
-
不要将一个表单嵌套在另一个表单中。你只会造成更多的问题
标签: c# visual-studio-2010
我是 Visual Studio 2010 的新手,我正计划创建一个计时系统。我只是想问我如何创建一个包含 2 个表单的表单。例如,如果我单击一个按钮,它将在表单中打开一个新表单。请帮忙。谢谢
【问题讨论】:
标签: c# visual-studio-2010
Form formA = new Form();
formA.IsMdiContainer = true;
Form formB = new Form();
formB.MdiParent = formA;
formB.Show();
【讨论】:
您必须与MDI (Multiple Document Interface) 合作,看看这个article 可能会有所帮助。
【讨论】:
您可以创建自定义表单,删除所有边框和工具栏,使其看起来尽可能接近面板。然后将新的自定义表单设置为 MdiContainer / MDI 面板并在该面板中显示表单,类似于下面的代码将完成这项工作
Mdi-Panel 定义:
公共类 MdiClientPanel:面板 { 私人表格 mdiForm; 私有 MdiClient ctlClient = new MdiClient();
public MdiClientPanel()
{
base.Controls.Add(this.ctlClient);
}
public Form MdiForm
{
get
{
if (this.mdiForm == null)
{
this.mdiForm = new Form();
/// set the hidden ctlClient field which is used to determine if the form is an MDI form
System.Reflection.FieldInfo field = typeof(Form).GetField("ctlClient", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
field.SetValue(this.mdiForm, this.ctlClient);
}
return this.mdiForm;
}
}
}
用法:
/// mdiChildForm is the form that should be showed in the panel
/// mdiClientPanel is an instance of the MdiClientPanel
myMdiChildForm.MdiParent = mdiClientPanel1.MdiForm;
【讨论】:
我认为,这是一个非常简单的方法:
Form1 form= new Form1 ();
form.TopLevel = false;
this.Controls.Add(form);
form.Show();
【讨论】: