【C#学习记录01】C#menu实现历史窗口记录

#【C#学习记录01】C#menu实现历史窗口记录
  实现内容:实现窗体在panel容器中加载的历史记录,只要窗口不关闭,不会从容器中移除。

  实现过程:
1、窗体设计,如图:在这里插入图片描述通过点击form2和form3将两个窗体加载在panel1中,并且将两个窗体的名称显示在窗口菜单栏下。
代码如下:
1、窗体加载代码:

 //加载窗体方法
 private void OpenForm(Form form)
        {
            form.TopLevel = false;
            form.WindowState = FormWindowState.Maximized;
            form.FormBorderStyle = FormBorderStyle.None;
            form.Parent = panel1;
            form.Show();
        }
        //窗体放入容器注意事项:
        //窗体关闭后,在添加会报错,所以应该再添加窗体前,进行判断,在进行窗体加载
        private Form2 form2 = new Form2();
        private void form2ToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (panel1.Contains(form2))
            {
                
                form2.BringToFront();
                return;
            }
            else if (form2 == null)
            {
                form2 = new Form2();

            }
            else if (form2 != null && form2.IsDisposed)
            {
                form2 = new Form2();
            }
            OpenForm(form2);
        }rp

2、加载历史代码:
在这里插入图片描述

 //添加历史记录
        private void LoadHis()
        {
            ToolStripMenuItem menue = new ToolStripMenuItem(panel1.Controls[panel1.Controls.Count-1].ToString().Split(':')[1]+"窗体"); //创建菜单对象
            WindowToolStripMenuItem.DropDownItems.Insert(WindowToolStripMenuItem.DropDownItems.Count, menue);//向菜单中添加子菜单
            switch((panel1.Controls[panel1.Controls.Count - 1].ToString().Split(':')[1] + "窗体").Trim())
            {
                case "第二个窗体":
                    menue.Click += new EventHandler(form2ToolStripMenuItem_Click);
                    break;
                case "第三个窗体":
                    menue.Click += new EventHandler(form3ToolStripMenuItem_Click_1);
                    break;
            } 
        }
         private void panel1_ControlAdded(object sender, ControlEventArgs e)
        {
            //加载记录
            LoadHis();
        }

代码中:switch是为了循环添加menu的click事件
3、program中定义了全局变量,以便获得关闭窗口的名称

public static string hisName = string.Empty;

4、获得关闭窗口的名称

private void button1_Click(object sender, EventArgs e)
        {
            Program.hisName = this.Name;
            Close(); 
        }

5、关闭窗体后,需要将记录清除

//panel中移除控件事件
        private void panel1_ControlRemoved(object sender, ControlEventArgs e)
        {
            //历史窗口移除记录
            WindowToolStripMenuItem.DropDownItems.RemoveByKey(Program.hisName);
        }

6、注意要点:
1、menu按钮通过press方法获取被选中的按钮
2、menu中remove方法删除menu
3、menu添加按钮可以使用add和insert,通过整个案例,在动态添加中,可以使用add,这是因为在remove时。按照insert的key删除,整个menu的key会重新变化,所以使用removebykey的方法,这个方法的参数是按钮的name。
7、未实现的点:
添加菜单的click事件使用switch循环,对于窗体较多的案例不太适用
  在本网站中,未找到相似案例,大家有做的成熟的,麻烦交流一下![抱拳]

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值