C# 如何通过C在另一个窗体中的MDI父级按钮中显示窗体#
我有两种形式(form1和form2)和mdaprient。 表单1中的按钮1C# 如何通过C在另一个窗体中的MDI父级按钮中显示窗体#,c#,winforms,C#,Winforms,我有两种形式(form1和form2)和mdaprient。 表单1中的按钮1 单击此按钮时,我希望在mdiparent中显示form2,您只需创建form2,设置它的mdiparent属性并显示它。唯一的问题是动态设置MdiParent属性-您需要保留MdiParent的实例。有几种方法可以“正确”做到这一点 简单方法 在表单1中,单击按钮应具有以下事件处理程序: private void Button1_Click(object sender, EventArgs e) { Form
单击此按钮时,我希望在mdiparent中显示form2,您只需创建
form2
,设置它的mdiparent
属性并显示它。唯一的问题是动态设置MdiParent
属性-您需要保留MdiParent
的实例。有几种方法可以“正确”做到这一点
简单方法
在表单1
中,单击按钮应具有以下事件处理程序:
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()); }
}
}
private void Button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.MdiParent = MdiParent.Instance;
form2.Show();
}
在您实例化您的MdiParent
的地方:
MdiParent.Instance.Show();
// instead of
new MdiParent().Show();
如果它是Program.cs
中的主窗体-main
:
Application.Run(MdiParent.Instance);
// instead of
Application.Run(new MdiParent());
表单1
按钮单击事件:
public class MdiParent : Form
{
private static MdiParent _instance;
public static MdiParent Instance
{
get { return _instance ?? (_instance = new MdiParent()); }
}
}
private void Button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.MdiParent = MdiParent.Instance;
form2.Show();
}
您只需要创建一个
Form2
,设置它的mdipradent
属性并显示它。唯一的问题是动态设置MdiParent
属性-您需要保留MdiParent
的实例。有几种方法可以“正确”做到这一点
简单方法
在表单1
中,单击按钮应具有以下事件处理程序:
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()); }
}
}
private void Button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.MdiParent = MdiParent.Instance;
form2.Show();
}
在您实例化您的MdiParent
的地方:
MdiParent.Instance.Show();
// instead of
new MdiParent().Show();
如果它是Program.cs
中的主窗体-main
:
Application.Run(MdiParent.Instance);
// instead of
Application.Run(new MdiParent());
表单1
按钮单击事件:
public class MdiParent : Form
{
private static MdiParent _instance;
public static MdiParent Instance
{
get { return _instance ?? (_instance = new MdiParent()); }
}
}
private void Button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.MdiParent = MdiParent.Instance;
form2.Show();
}
要在MDI父级中显示表单,关键点包括:
- 您应该将属性
设置为IsMdiContainer
true
- 您应该显示您的mdi父窗体
- 如果要将窗体显示为mdi子窗体,请将子窗体的属性设置为mdi父窗体的和实例
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();
var f=newform2();
//我假设[mdiparent]是mdi父窗体的类名
f、 MdiParent=Application.OpenForms.OfType().FirstOrDefault();
f、 Show();
esle您应该首先显示您的mdi父窗体,并使用上述代码将窗体2显示为mdi子窗体。要在mdi父窗体中显示窗体,关键点是:
- 您应该将属性
设置为IsMdiContainer
true
- 您应该显示您的mdi父窗体
- 如果要将窗体显示为mdi子窗体,请将子窗体的属性设置为mdi父窗体的和实例
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();
var f=newform2();
//我假设[mdiparent]是mdi父窗体的类名
f、 MdiParent=Application.OpenForms.OfType().FirstOrDefault();
f、 Show();
esle您应该首先显示您的mdi父窗体,并使用上述代码将窗体2显示为mdi子窗体。查看此处:查看此处:Form1是mdi子窗体吗?您的mdiParent是否已打开?表单1已在mdiParent中打开,我希望在单击按钮并关闭时在mdiParent中显示表单2form1@hadrmi我认为答案是正确的,这两个选项都会起作用,您唯一需要的就是使用这个来关闭form1.Close();Form1是一个孩子吗?您的mdiParent是否已打开?表单1已在mdiParent中打开,我希望在单击按钮并关闭时在mdiParent中显示表单2form1@hadrmi我认为答案是正确的,这两个选项都会起作用,您唯一需要的就是使用这个来关闭form1.Close();