如何从另一个MDI子窗体中打开MDI子窗体

时间:2019-11-06 14:50:41

标签: c# windows-forms-designer

我有一个属性“ MDI container”设置为true的窗体,当在MenuStrip上按Labels时,它将打开MDI子级,但是我有两个问题:

第一个是一旦我打开一个MDI Child,就无法打开另一个;我在打开当前MDI子项所按下的同一MenuStrip上按下了不同的标签,但没有任何反应。

第二个问题是我无法从代码中的另一个 MDI子窗体中打开一个MDI子窗体

在此段之后,我将展示代码的相关部分以及我已经尝试过的一些事情(没有解决方案)

//Event of the MenuStrip that opens an MDI child (homePage or sellProduct) from the MDI container

HomePage homePage = null;
SellProduct sellProduct = null;

private void HomeToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (homePage == null)
    {
        homePage = new HomePage();
        homePage.TopLevel = false;
        homePage.MdiParent = this;
    }

    homePage.Show();
}

private void ToolStripSellPtoduct_click(object sender, EventArgs e)
{
    if (sellProduct == null)
    {
        sellProduct = new SellProduct();
        sellProduct.TopLevel = false;
        sellProduct.MdiParent = this;
    }

    sellProduct.Show();
}

我试图以儿童形式复制此文件,但它不起作用。可能很重要的一点是,当我加载MDI容器时,我也加载了第一个MDI子级

private void MainPage_Load(object sender, EventArgs e)
{
    if (homePage == null)
    {
        homePage = new HomePage();
        homePage.TopLevel = false;
        homePage.MdiParent = this;
    }
    homePage.Show();
}

这就是我认为第一个问题所必需的所有代码(我无法使用MenuStrip从另一个表单中打开MDI子表单)。如果您需要我的代码中的任何内容,我会提供。

在第二个问题中(我无法从代码中打开另一个MDI子窗体),当我按下最后一个中的按钮时,我试图从另一个“ SellProduct”打开MDI子窗体“ HomePage”:

public partial class SellProduct : Form
{
    public SellProduct()
    {
        InitializeComponent();
        }

            private void Button_Sale_Click(object sender, EventArgs e)
            {
                HomePage homePage = new HomePage();
                homePage.show();
                this.close();
            }
        }
    }
}

上面的代码关闭显示Mdiparent的MDI表单SellProduct(但它不会再次执行mdi父级,并且MenuStrip仍然不起作用,很奇怪),然后打开一个MDI父级(MenuStrip实际在其中工作)。所以不,它不会打开另一个mdi孩子,它只会做奇怪的事情。

仅此而已,谢谢您的宝贵时间,我们将竭诚为您提供一切帮助,并希望您度过愉快的一天(:。

1 个答案:

答案 0 :(得分:0)

我终于解决了这个,这是我的解决方案:

问题1)一旦我打开一个MDI子级,我就不能再打开一个子级;我在打开当前MDI子项的同一MenuStrip上按下了不同的标签,但没有任何反应。

解决方案:未显示MDI子窗体,因为在显示另一窗体之前,我必须隐藏(从MainPage)打开的窗体。

问题2)我无法从代码中的另一个MDI子表单中打开MDI子表单。

解决方案:这是第一个问题,如果未隐藏实际显示的表单,则无法显示新表单,因为您必须隐藏当前表单,然后打开新表单:

//In this case I want to show the HomePage
this.Hide();
HomePage homePage = new HomePage();
homePage.Show();