3

我有这些表格:

MainScreen - MDI 容器
DataBaseOutput -
NewAnime -

DataBaseOutput 有一个选项卡控件,其中包含数据网格,每个数据网格用于不同的表。我使用访问数据库。

在这些选项卡中,有一个菜单条,其中将调用“新建”、“编辑”、“删除”等功能。现在,当我在第一个选项卡的菜单条上并单击“新建”时,我想在 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 表单,我只是想让它工作。

4

1 回答 1

1

您是否将 设置MainFormMDIContainer?为此,请将其IsMdiContainer属性设置为 true;还要检查它有File顶级Window菜单项NewClose菜单项。(本教程建议这样做,我知道它Window至少应该有一个菜单项)。

查看本教程以获得更多指导:创建 MDI 子窗体 (MSDN)

编辑:仔细观察,您似乎正在创建 MainForm 的一个新实例,并试图将表单显示为该实例的子级,而不是在现有 MainForm 中显示它。我假设您此时已经打开了 MainForm 的一个实例?假设 OutputForm 和 AddAnime 表单是 MainForm 的子表单,您可以像这样调用现有实例的方法:

private void NewAnime_Click(object sender, EventArgs e)
{
    this.ParentForm.mShowForm(2);
    this.Close();
}

但理想情况下,您应该在 DataBaseOutput 上有一个 MainForm 监听的事件,并在引发事件时显示新的 Form。有关更多信息,请参见此处(它谈论的是用户控件而不是子表单,但原理是相同的)

从用户控件调用父窗体函数

于 2011-03-29T10:58:57.720 回答