【问题标题】:how to show form in mdiparent from button in another form by C#如何通过C#以另一种形式的按钮在mdiparent中显示形式
【发布时间】:2015-09-28 10:17:51
【问题描述】:

我有两种形式( form1form2 )和 mdiparentform1 中的 button1 单击此按钮时,我想在 mdiparent

中显示 form2

【问题讨论】:

标签: c# winforms


【解决方案1】:

要在 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();

你应该先显示你的 mdi 父表单,然后使用上面的代码将表单 2 显示为 mdi 子表单。

【讨论】:

  • Form1 是 mdichild 吗?您的 mdiParent 是否已打开?
  • form1 在 mdiparent 中打开,我想在单击按钮并关闭 form1 时在 mdiparent 中显示 form2
  • @hadrmi 我认为答案是正确的,这两个选项都可以工作,您唯一需要的是使用 this.Close(); 关闭 form1;
【解决方案2】:

您唯一需要做的就是创建一个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();

如果是主窗体——Main in Program.cs:

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();
}

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多