gpt4 book ai didi

c# 主菜单和 mdi 窗体

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:15 24 4
gpt4 key购买 nike

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

我一直在这样做:

  • 创建一个“isMdiContainer”设置为“true”的父表单
  • 在 mdi 容器中创建一个菜单条
  • 创建一个实现单例的子表单,以便表单只显示一次
  • 在 mdi 容器中添加如下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Myapp
{

public partial class MdiContainer : Form
{
private module1 Module1Window;
private module2 Module2Window;
private module3 Module3Window;

public FormContainer()
{
InitializeComponent();
this.Module1Window = modul1.getInstance();
this.Module1Window.MdiParent = this;
this.Module2Window = modul2.getInstance();
this.Module2Window.MdiParent = this;
this.Module3Window = modul3.getInstance();
this.Module3Window.MdiParent = this;
this.Module1Window.Show();
}
private void module1ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Module3Window.Hide();
this.Module2Window.Hide();
this.Module1Window.Show();
}
private void module2ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Module1Window.Hide();
this.Module3Window.Hide();
this.Module2Window.Show();
}
private void module3ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Module1Window.Hide();
this.Module2Window.Hide();
this.Module3Window.Show();
}
}

现在,这显然工作正常。但维护起来很痛苦。每次我想添加另一个子表单时,我都必须:

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

什么是更优雅或更有效的方法来存档它?

最佳答案

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

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

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

无论您有多少表单,都可以使用相同的处理程序。

或者,您可以将 key 作为标签并使用 Dictionary<string, Form>因此您可以更懒惰地创建表单,但概念是相同的。

关于c# 主菜单和 mdi 窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com