Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#主菜单和mdi表单_C#_Menu_Mdi_Mdichild_Mdiparent - Fatal编程技术网

c#主菜单和mdi表单

c#主菜单和mdi表单,c#,menu,mdi,mdichild,mdiparent,C#,Menu,Mdi,Mdichild,Mdiparent,到目前为止,作为一名.net开发人员,我大量使用mdi表单来显示特定的“菜单点”,例如“模块1”、“模块2”等等 我一直是这样做的: 创建一个“isMdiContainer”设置为“true”的父窗体 在mdi容器中创建菜单条 创建实现singleton的子窗体,以便该窗体只显示一次 向mdi容器中添加类似以下代码的内容: } 现在,这显然很有效。但这是一个痛苦的维持。每次我想添加另一个子表单时,我必须: 实现单例 在mdi容器中创建相应的属性 获取实例并设置mdi父级 单击其他按钮时隐

到目前为止,作为一名.net开发人员,我大量使用mdi表单来显示特定的“菜单点”,例如“模块1”、“模块2”等等

我一直是这样做的:

  • 创建一个“isMdiContainer”设置为“true”的父窗体
  • 在mdi容器中创建菜单条
  • 创建实现singleton的子窗体,以便该窗体只显示一次
  • 向mdi容器中添加类似以下代码的内容:

}

现在,这显然很有效。但这是一个痛苦的维持。每次我想添加另一个子表单时,我必须:

  • 实现单例
  • 在mdi容器中创建相应的属性
  • 获取实例并设置mdi父级
  • 单击其他按钮时隐藏新窗体
  • 单击相应的按钮时,显示表单并隐藏所有其他表单

有什么更优雅或者说更有效的方法来存档这些内容呢?

什么时候创建菜单项?这些是随子窗体一起动态创建的吗

如果是这样,您可以创建表单并将其添加到列表中,然后将菜单项的Tag属性指定给表单。将所有菜单项click event分配给同一个处理程序,并在处理程序中执行此操作

private void menuStrip_Click(object sender, EventArgs e)
{
    var menu = (ToolStripItem)sender;
    var viewForm = (Form)sender.Tag;
    foreach(Form childForm in _childForms)
        childForm.Hide();
    viewForm.Show();
}
无论有多少表单,都可以使用相同的处理程序


或者,您可以使用一个键作为标记,并使用一个
字典
,这样您可以更轻松地创建表单,但概念是相同的。

如果我理解正确:您使用MDI处理不同的表单,但一次只显示一个表单。为什么?我认为这不会被编译。是MdiContainer还是FormContainer?
private void menuStrip_Click(object sender, EventArgs e)
{
    var menu = (ToolStripItem)sender;
    var viewForm = (Form)sender.Tag;
    foreach(Form childForm in _childForms)
        childForm.Hide();
    viewForm.Show();
}