• C# WinForm 用MenuStrip动态生成菜单并动态加载事件


    最近在做WINFORM开发,一直都在为主界面的点击事件及动态加载菜单苦脑。现在已解决这个问题了,可以实现数据库或都XML等配置完成动态生成菜单及事件加载。代码如下:

    private void Form1_Load(object sender, EventArgs e)
            {
                //添加菜单一 
                ToolStripMenuItem subItem;
                subItem = AddContextMenu("入库", menuStrip1.Items, null);
                //添加子菜单 
                AddContextMenu("添加入库", subItem.DropDownItems, new EventHandler(MenuClicked));
                AddContextMenu("入库管理", subItem.DropDownItems, new EventHandler(MenuClicked));

                //添加菜单二 
                subItem = AddContextMenu("出库", menuStrip1.Items, null);
                //添加子菜单 
                AddContextMenu("添加出库", subItem.DropDownItems, new EventHandler(MenuClicked));
                AddContextMenu("出库管理", subItem.DropDownItems, new EventHandler(MenuClicked));
            }

          /// <summary>
            
    /// 添加子菜单
            
    /// </summary>
            
    /// <param name="text">要显示的文字,如果为 - 则显示为分割线</param>
            
    /// <param name="cms">要添加到的子菜单集合</param>
            
    /// <param name="callback">点击时触发的事件</param>
            
    /// <returns>生成的子菜单,如果为分隔条则返回null</returns>

            ToolStripMenuItem AddContextMenu(string text, ToolStripItemCollection cms, EventHandler callback)
            {
                if (text == "-")
                {
                    ToolStripSeparator tsp = new ToolStripSeparator();
                    cms.Add(tsp);
                    return null;
                }
                else if (!string.IsNullOrEmpty(text))
                {
                    ToolStripMenuItem tsmi = new ToolStripMenuItem(text);
                    tsmi.Tag = text + "TAG";
                    if (callback != null) tsmi.Click += callback;
                    cms.Add(tsmi);

                    return tsmi;
                }

                return null;
            }

            void MenuClicked(object sender, EventArgs e)
            {
         //以下主要是动态生成事件并打开窗体

        
    //((sender as ToolStripMenuItem).Tag)强制转换

               ObjectHandle t = Activator.CreateInstance("WinForms""WinForms.Form2");
                Form f = (Form)t.Unwrap();
                f.ShowDialog();

            }
  • 相关阅读:
    阿里云slb实现多域名https
    docker容器互连
    ext4文件系统(转)
    Effective Java 读书笔记(四):泛型
    Effective Java 读书笔记(一):创建和销毁对象
    Effective Java 读书笔记(三):类与接口
    Effective Java 读书笔记(二):对象通用方法
    三种TCP协议聊天室实现
    WebSocket协议探究(三):MQTT子协议
    WebSocket协议探究(二)
  • 原文地址:https://www.cnblogs.com/Footprints/p/2665406.html
Copyright © 2020-2023  润新知