我有这些表格:
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表单而我只是想让它运行起来。
答案 0 :(得分:1)
您是否已将MainForm
设为MDIContainer
?为此,请将其IsMdiContainer属性设置为true;另外,请检查它是否有File
和Window
个顶级菜单项以及New
和Close
个菜单项。 (教程建议这一点,我知道它至少应该有一个Window
菜单项。
请查看本教程以获取更多指导:Creating MDI Child Forms (MSDN)
编辑:更仔细地看一下,看来你正在创建一个新的MainForm实例,并试图将该表单显示为该实例的子表单,而不是在现有表单中显示它MainForm的。我假设你已经有一个MainForm实例打开了吗?假设OutputForm和AddAnime表单是MainForm的子表单,您可以像这样调用现有实例的方法:
private void NewAnime_Click(object sender, EventArgs e)
{
this.ParentForm.mShowForm(2);
this.Close();
}
但理想情况下,您应该在MainForm侦听的DataBaseOutput上有一个事件,并在引发事件时显示新的Form。有关详细信息,请参阅此处(它讨论用户控件而非子表单,但原理相同):