如何用c#在窗体中显示与窗体中的按钮不同的窗体
本文关键字:窗体 按钮 何用 显示 | 更新日期: 2023-09-27 18:14:54
我有两个表单(form1和form2)和mdiparent。form1中的button1当点击这个按钮,我想显示form2在mdiparent
当您想要在MDI父类中显示表单时,关键点是:
- 你应该有一个窗体的属性
IsMdiContainer
设置为true
您应该显示您的mdi父表单 - 当你想显示一个窗体作为mdi子窗体时,将子窗体的属性
MdiParent
设置为mdi父窗体的实例
如果Form1显示为mdi Child,在Form1的按钮点击处理程序中,你可以简单地这样做:
var f = new Form2();
f.MdiParent = this.MdiParent;
f.Show();
else,如果您的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();
否则,您应该首先显示您的mdi父窗体,然后使用上面的代码将窗体2显示为mdi子窗体。
您唯一需要做的就是创建一个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();
}