1

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

例如,我有一个名为 Tile Model 的菜单条项目,它在单击时调用/打开一个特定的子窗体。当我单击另一个菜单条项时,比如说,称为帐户,由 Tile Model 菜单项调用的子窗体必须自动关闭,而由 Accounts 菜单条项调用的子窗体将打开。

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

我现在拥有的代码会发生什么情况,每当打开一个子 mdi 表单并且它处于活动状态时,就会打开另一个子表单,这些子表单只是重叠并且看起来很凌乱。

这是我的代码的摘录。

公共部分类 Form1 : Form { public Form1() { InitializeComponent(); }

    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();
    }

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

4

1 回答 1

0

如果您只想显示单个 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>();
于 2013-09-25T05:22:01.273 回答