如何从另一个 MDI 子窗体打开一个 MDI 子窗体
how to open a MDI child form from another MDI child form
我有一个 属性 "MDI container" 设置为 true 的表单,当按下 MenuStrip 上的标签时会打开 MDI 子项,但我有两个问题:
第一个是一旦我打开一个MDI Child我就不能打开另一个;我在同一个 MenuStrip 上按下了不同的标签,我按下它来打开当前的 MDI 子项,但没有任何反应。
第二个问题是我无法打开来自另一个 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 parent,而且 MenuStrip 仍然不起作用,很奇怪)并打开一个 MDI parent(MenuStrip 实际工作的地方)。所以不,它不会打开另一个 mdi 子进程,它只会做一些奇怪的事情。
就是这样,感谢您的宝贵时间,欢迎您的帮助,希望您度过愉快的一天 (: .
我终于解决了这个问题,这是我的解决方案:
问题 1) 一旦我打开了一个 MDI Child,我就无法打开另一个;我在同一个 MenuStrip 上按了不同的标签来打开当前的 MDI 子项,但没有任何反应。
解决方案:MDI 子窗体没有显示,因为我必须在显示另一个窗体之前隐藏打开的窗体(从 MainPage)。
问题 2)我无法通过代码从另一个 MDI 子窗体打开一个 MDI 子窗体。
解决方法:和第一个一样的问题 如果实际显示的表格没有隐藏,新的不能显示,所以必须先隐藏当前的,再打开新的:
//In this case I want to show the HomePage
this.Hide();
HomePage homePage = new HomePage();
homePage.Show();
我有一个 属性 "MDI container" 设置为 true 的表单,当按下 MenuStrip 上的标签时会打开 MDI 子项,但我有两个问题:
第一个是一旦我打开一个MDI Child我就不能打开另一个;我在同一个 MenuStrip 上按下了不同的标签,我按下它来打开当前的 MDI 子项,但没有任何反应。
第二个问题是我无法打开来自另一个 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 parent,而且 MenuStrip 仍然不起作用,很奇怪)并打开一个 MDI parent(MenuStrip 实际工作的地方)。所以不,它不会打开另一个 mdi 子进程,它只会做一些奇怪的事情。
就是这样,感谢您的宝贵时间,欢迎您的帮助,希望您度过愉快的一天 (: .
我终于解决了这个问题,这是我的解决方案:
问题 1) 一旦我打开了一个 MDI Child,我就无法打开另一个;我在同一个 MenuStrip 上按了不同的标签来打开当前的 MDI 子项,但没有任何反应。
解决方案:MDI 子窗体没有显示,因为我必须在显示另一个窗体之前隐藏打开的窗体(从 MainPage)。
问题 2)我无法通过代码从另一个 MDI 子窗体打开一个 MDI 子窗体。
解决方法:和第一个一样的问题 如果实际显示的表格没有隐藏,新的不能显示,所以必须先隐藏当前的,再打开新的:
//In this case I want to show the HomePage
this.Hide();
HomePage homePage = new HomePage();
homePage.Show();