我有这些表格:
主屏幕 - MDI 容器
DataBaseOutput - 子
新动漫 - child
DataBaseOutput 有一个包含数据网格的选项卡控件,每个数据网格用于不同的表。我使用访问数据库。
在这些选项卡中,有一个菜单条,其中将调用“新建”、“编辑”、“删除”等功能。现在,当我在第一个选项卡的菜单条上并单击“新建”时,我想在 MDI 容器内打开“NewAnime”表单。然而,这并没有像我计划的那样工作。起初我试图从子窗体 (DataBaseOutput) 调用它。这导致打开一个新表单而不是一个 child 。当我把它变成 child 时,它没有出现。
然后我试了很多东西,但我还是没弄明白。
这是调用表单的当前代码。它使用主窗体中的方法调用窗体:
private void NewAnime_Click(object sender, EventArgs e)
{
MainScreen main = new MainScreen();
main.mShowForm(2);
this.Close();
}
主窗体中的方法:
// Forms for MDI Parent
DataBaseOutput OutputForm = new DataBaseOutput();
NewAnime AddAnime = new NewAnime();
// How i made them childs (this is at the InitializeComponent(); part)
OutputForm.MdiParent = this;
AddAnime.MdiParent = this;
public void mShowForm(int formnumber)
{
switch (formnumber)
{
case 1: OutputForm.Show(); break;
case 2: AddAnime.Show(); break;
}
}
有没有人知道我做错了什么,也许有更好的主意?这可能有点太多变通了,但正如我所说,这是我第一次使用 MDI 表单,我只是想让它工作。
最佳答案
您是否已将 MainForm
设置为 MDIContainer
?为此设置其 IsMdiContainer属性为真;还要检查它是否具有 File
和 Window
顶级菜单项以及 New
和 Close
菜单项。 (教程建议这样做,我知道它至少应该有一个 Window
菜单项)。
查看本教程以获得更多指导:Creating MDI Child Forms (MSDN)
编辑:仔细观察,您似乎正在创建 MainForm 的新实例,并试图将表单显示为该实例的子实例,而不是在现有实例中显示它主窗体。我假设此时您已经打开了一个 MainForm 实例?假设 OutputForm 和 AddAnime 表单是 MainForm 的子表单,您可以像这样调用现有实例的方法:
private void NewAnime_Click(object sender, EventArgs e)
{
this.ParentForm.mShowForm(2);
this.Close();
}
但理想情况下,您应该在 DataBaseOutput 上有一个 MainForm 监听的事件,并在引发该事件时显示新的 Form。请参阅此处了解更多信息(它讨论的是用户控件而不是子窗体,但原理是相同的):
关于C# 从子窗体调用 MDI 子窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5471343/