gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:05:34 24 4
gpt4 key购买 nike

我有这些表格:

主屏幕 - 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com