C#从子表单调用MDI子项

我有这些形式: MainScreen - MDI容器 DataBaseOutput - child NewAnime - 孩子 DataBaseOutput有一个tab控件,用于保存datagrids,每个datagrids用于不同的表。我使用访问数据库。 在这些标签中,有一个menustrip,其中将调用“新”,“编辑”,“删除”等功能。现在,当我在第一个选项卡的menustrip上并单击“新建”时,我想在MDI容器内打开“NewAnime”表单。然而,这不符合我的计划。起初我试图从子窗体(DataBaseOutput)中调用它。这导致打开一个新的表单而不是一个孩子。当我把它变成一个孩子时它没有露面。 然后我转了很多东西,但我还是没弄明白。 这是调用表单的当前代码。它使用主窗体中的方法调用表单:
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属性设置为true;还要检查它是否具有
File
Window
顶级菜单项以及
New
Close
菜单项。 (教程建议这一点,我知道它至少应该有一个
Window
菜单项)。 有关更多指导,请查看本教程:创建MDI子窗体(MSDN) 编辑:更仔细地看,它似乎是你正在创建一个新的MainForm实例,并试图将该表单显示为该实例的子项,而不是在现有的MainForm中显示它。我假设你已经有一个MainForm实例打开了吗?假设OutputForm和AddAnime表单是MainForm的子表单,您可以像这样调用现有实例的方法:
private void NewAnime_Click(object sender, EventArgs e)
{
    this.ParentForm.mShowForm(2);
    this.Close();
}
但理想情况下,您应该在MainForm侦听的DataBaseOutput上有一个事件,并在引发事件时显示新的Form。有关详细信息,请参阅此处(它讨论用户控件而非子表单,但原理相同): 从用户控件调用父表单函数     

要回复问题请先登录注册