Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从子窗体调用MDI子窗体_C#_Mdi_Mdichild_Mdiparent - Fatal编程技术网

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

C#从子窗体调用MDI子窗体,c#,mdi,mdichild,mdiparent,C#,Mdi,Mdichild,Mdiparent,我有以下表格: 主屏幕-MDI容器 数据库输出-子级 新动漫儿童 DataBaseOutput有一个选项卡控件,用于保存不同表的数据网格。我使用access数据库 在这些选项卡中,有一个menustrip,从中可以调用“新建”、“编辑”、“删除”等功能。现在,当我在第一个选项卡的菜单上单击“新建”时,我想打开MDI容器中的表单“NewAnime”。然而,这并没有像我计划的那样起作用。起初,我试图从childform(DataBaseOutput)调用它。这导致打开一个新表单而不是子表单。当我把它

我有以下表格:

主屏幕-MDI容器
数据库输出-子级
新动漫儿童

DataBaseOutput有一个选项卡控件,用于保存不同表的数据网格。我使用access数据库

在这些选项卡中,有一个menustrip,从中可以调用“新建”、“编辑”、“删除”等功能。现在,当我在第一个选项卡的菜单上单击“新建”时,我想打开MDI容器中的表单“NewAnime”。然而,这并没有像我计划的那样起作用。起初,我试图从childform(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;
    }
}
主要形式的方法:

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
设置为
MDI容器?为此,请将其属性设置为true;同时检查它是否有
文件
窗口
顶级菜单项和
新建
关闭
菜单项。(教程建议这样做,我知道它至少应该有一个
窗口
菜单项)

有关更多指导,请参阅本教程:

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

private void NewAnime_Click(object sender, EventArgs e)
{
    this.ParentForm.mShowForm(2);
    this.Close();
}
但理想情况下,在数据库输出上应该有一个MainForm侦听的事件,并在引发该事件时显示新表单。有关更多信息,请参见此处(它讨论的是用户控件,而不是子窗体,但原理相同):


是的,它是一个MDI容器,并且都在那里。这个想法是打开一个新的子对象(AddAnime)并填充它,然后再次关闭它,但我希望它在MDI容器中。无论如何,我需要从一个孩子那里给一个新的孩子打电话,而我似乎无法让这一切正常发生。我可以从主窗体调用子窗体,它可以工作,但我不能从另一个子窗体调用子窗体。@您的编辑:好的,谢谢,但是我需要在哪里显示数据库输出窗体主窗体是它的父窗体?因为我现在不能运行它。