[英]how to show form in mdiparent from button in another form by C#
我有两种形式( form1和form2 )和mdiparent 。 单击此按钮时,要在form1中显示form1中的button1
您唯一需要做的就是创建一个Form2
,将其设置为MdiParent
属性并显示它。 唯一的问题是动态设置MdiParent
属性-您将需要保存MdiParent
的实例。 有几种方法可以“适当地”执行此操作。
在Form1
按钮中,单击应具有以下事件处理程序:
private void Button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.MdiParent = this.MdiParent; // "this" is Form1
form.Show();
}
此解决方案的体系结构较少-但是,如果合适,可以选择此解决方案。
如果这样做,我将使用单例模式。 这就是我要这样做的方式:
MdiParent
:
public class MdiParent : Form
{
private static MdiParent _instance;
public static MdiParent Instance
{
get { return _instance ?? (_instance = new MdiParent()); }
}
}
在实例化MdiParent
的地方 :
MdiParent.Instance.Show();
// instead of
new MdiParent().Show();
如果它是主要形式Program.cs
Main
:
Application.Run(MdiParent.Instance);
// instead of
Application.Run(new MdiParent());
Form1
按钮单击事件:
private void Button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.MdiParent = MdiParent.Instance;
form2.Show();
}
您想在MDI父级中显示表单的关键点是:
IsMdiContainer
设置为true
的表单 MdiParent
设置为您的mdi父表单的实例 因此,如果您的Form1显示为mdi Child,则可以在表单1的按钮单击处理程序中执行以下操作:
var f = new Form2();
f.MdiParent = this.MdiParent;
f.Show();
否则,如果您的mdi父级表单是打开的,但表单1不是mdi子级:
var f = new Form2();
//I supposed that [mdiparent] is class name of your mdi parent form
f.MdiParent = Application.OpenForms.OfType<mdiparent>().FirstOrDefault();
f.Show();
esle,您应该先显示您的mdi父级表单,并使用上述代码将表单2显示为mdi子级。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.