繁体   English   中英

如何通过C#在另一种形式的按钮中以mdiparent形式显示形式

[英]how to show form in mdiparent from button in another form by C#

我有两种形式( form1form2 )和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的表单
  • 您应该出示您的MDI父母表格
  • 当您想要将表单显示为mdi子表单时,请将子表单的属性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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM