C# 从子窗体调用 MDI 子窗体

标签 c# mdi mdichild mdiparent

我有这些表格:

主屏幕 - 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属性为真;还要检查它是否具有 FileWindow 顶级菜单项以及 NewClose 菜单项。 (教程建议这样做,我知道它至少应该有一个 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。请参阅此处了解更多信息(它讨论的是用户控件而不是子窗体,但原理是相同的):

Calling parent form functions from a user control

关于C# 从子窗体调用 MDI 子窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5471343/

相关文章:

c# - 在页面/主页面和子页面之间共享相同的 View 模型

performance - 带有许多选项卡的 Angularjs 和 MDI SPA 应用程序

c# - 最大化 MDI 子窗体

vb.net - 如何用vb从另一个mdi子窗体打开?

c# - 如何从 MDI 子窗体(MDI 应用程序)打开窗体对话框

c# - 在 webjob 和 web api 之间共享域 DLL?

c# - 日期验证

c# - 从没有 showdialog 的表单关闭时返回一个值

C# foreach with string - 忽略最后一个字符

C# MDI - 如何防止滚动条?