使用父 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 子项,如何使用专用字段来存储上次显示的子项。然后你可以编写一个这样的方法:
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>();