C# 如何通过C在另一个窗体中的MDI父级按钮中显示窗体#

C# 如何通过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

我有两种形式(form1form2)和mdaprient表单1中的按钮1
单击此按钮时,我希望在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父窗体的和实例
因此,如果您的表单1显示为mdi子级,则在表单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();
var f=newform2();
//我假设[mdiparent]是mdi父窗体的类名
f、 MdiParent=Application.OpenForms.OfType().FirstOrDefault();
f、 Show();

esle您应该首先显示您的mdi父窗体,并使用上述代码将窗体2显示为mdi子窗体。

要在mdi父窗体中显示窗体,关键点是:

  • 您应该将属性
    IsMdiContainer
    设置为
    true
  • 您应该显示您的mdi父窗体
  • 如果要将窗体显示为mdi子窗体,请将子窗体的属性设置为mdi父窗体的和实例
因此,如果您的表单1显示为mdi子级,则在表单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();
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();