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