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

            }
  • 相关阅读:
    使用nginx在本地查看angular打包项目
    iso与安卓遇到的问题
    Spark 常用的读取数据api
    Spark DataFrame常用API
    spark 词频统计
    spark-shell和spark-sql
    Spark中 RDD、DF、DS的区别与联系
    SparkSQL连接Hive
    spark安装 centos7
    scala安装 centos7
  • 原文地址:https://www.cnblogs.com/Footprints/p/2665406.html
Copyright © 2020-2023  润新知