C#从子窗体调用MDI子窗体
我有以下表格: 主屏幕-MDI容器C#从子窗体调用MDI子窗体,c#,mdi,mdichild,mdiparent,C#,Mdi,Mdichild,Mdiparent,我有以下表格: 主屏幕-MDI容器 数据库输出-子级 新动漫儿童 DataBaseOutput有一个选项卡控件,用于保存不同表的数据网格。我使用access数据库 在这些选项卡中,有一个menustrip,从中可以调用“新建”、“编辑”、“删除”等功能。现在,当我在第一个选项卡的菜单上单击“新建”时,我想打开MDI容器中的表单“NewAnime”。然而,这并没有像我计划的那样起作用。起初,我试图从childform(DataBaseOutput)调用它。这导致打开一个新表单而不是子表单。当我把它
数据库输出-子级
新动漫儿童 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容器中。无论如何,我需要从一个孩子那里给一个新的孩子打电话,而我似乎无法让这一切正常发生。我可以从主窗体调用子窗体,它可以工作,但我不能从另一个子窗体调用子窗体。@您的编辑:好的,谢谢,但是我需要在哪里显示数据库输出窗体主窗体是它的父窗体?因为我现在不能运行它。