使用父 MDI 上的主菜单条控件关闭子 MDI C#

本文关键字:MDI 控件 菜单 | 更新日期: 2023-09-27 18:32:37

我正在使用 mdi 形式的 C# 在 Visual Studio 2010 中创建一个 Windows 窗体应用程序。我已经设法将子窗体连接到父 mdi 窗体上的相应菜单条控件,但是,我希望将这些子 mdi 窗体停靠到父 mdi 的大小,并在使用另一个菜单条控件打开另一个子 mdi 窗体时自动关闭它们。

例如,我有一个名为"平铺模型"的菜单条项,它在单击时调用/打开特定的子窗体。当我单击另一个菜单条项(例如称为"帐户"(时,"平铺模型"菜单项调用的子窗体必须自动关闭,并且"帐户"菜单条项调用的子窗体将打开。

请注意,我已将表单边框样式设置为"无"。

我现在拥有的代码发生的情况是,每当打开一个子 MDI 窗体并且当它处于活动状态时,打开另一个子窗体时,这些 chilf 窗体只是重叠,看起来很混乱。

这是我的代码摘录。

公共分部类 表格 1 : 表格 { 公共表单1(( { 初始化组件((; }

    private void manageTileModelToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ManageTileModel ChildForm = new ManageTileModel();
        ChildForm.MdiParent = this;
        ChildForm.Show();
    }
    private void startInspectionToolStripMenuItem_Click(object sender, EventArgs e)
    {
        StartInspection ChildForm = new StartInspection();
        ChildForm.MdiParent = this;
        ChildForm.Show();

    }
    private void manageTestReportsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ManageTestReports ChildForm = new ManageTestReports();
        ChildForm.MdiParent = this;
        ChildForm.Show();
    }
    private void registerNewAccountToolStripMenuItem_Click(object sender, EventArgs e)
    {
        RegNewAccount ChildForm = new RegNewAccount();
        ChildForm.MdiParent = this;
        ChildForm.Show();
    }
    private void manageAccountsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ManageAccounts ChildForm = new ManageAccounts();
        ChildForm.MdiParent = this;
        ChildForm.Show();
    }
    private void inspectionToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        GenHelpInspection ChildForm = new GenHelpInspection();
        ChildForm.MdiParent = this;
        ChildForm.Show();
    }
    private void tileModelToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        GenHelpTileModel ChildForm = new GenHelpTileModel();
        ChildForm.MdiParent = this;
        ChildForm.Show();
    }
    private void accountsToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        GenHelpAccounts ChildForm = new GenHelpAccounts();
        ChildForm.MdiParent = this;
        ChildForm.Show();
    }
    private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
    {
        About ChildForm = new About();
        ChildForm.MdiParent = this;
        ChildForm.Show();
    }

回复将非常有帮助,我将不胜感激:)。

使用父 MDI 上的主菜单条控件关闭子 MDI C#

如果只想显示单个 MDI 子项,如何使用专用字段来存储上次显示的子项。然后你可以编写一个这样的方法:

private void HideLastChild() {
    if(_lastChild != null)
        _lastChild.Close();
}

并在ChildForm.Show()之前调用它,当然还必须更新_lastChild字段:

ChildForm.Show();
_lastChild = ChildForm;

您可以将所有显示操作组合到单个泛型方法中:

private void ShowChild<TWindow>() where TWindow: Form, new() {
    var child = new TWindow();
    HideLastChild();
    _lastChild = child;
    child.MDIParent = this;
    child.Show();
}
ShowChild<About>();