繁体   English   中英

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

[英]close child mdi c# using main menu strip control on parent mdi

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

例如,我有一个名为Tile Model的菜单条项目,单击该菜单项会调用/打开特定的子窗体。 当我单击另一个菜单条项目(假设为“帐户”)时,“平铺模型”菜单项所调用的子窗体必须自动关闭,而“帐户”菜单条项所调用的子窗体将打开。

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

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

这里摘录自我的代码。

公共部分类Form1:表单{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();
    }

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

如果只想显示一个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>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM