zoukankan      html  css  js  c++  java
  • <转>通过反射获取Form/MenuStrip/ContextMenuStrip等列表

    private void button1_Click(object sender, EventArgs e)
            {
                treeView1.Nodes.Clear();
                Assembly a = Assembly.LoadFile(Application.ExecutablePath);
                Type[] types = a.GetTypes();
                foreach (Type t in types)
                {
                    if (t.BaseType.Name == "Form")     //遍历窗体
                    {
                        Form f = (Form)Activator.CreateInstance(t, true);
                        if (f != null)
                        {
                            TreeNode node = new TreeNode();
                            node.Name = f.Name;
                            node.Text = f.Text;
                            treeView1.Nodes.Add(node);
                            FindControl(f, node);          //根据窗体遍历菜单栏及工具栏
                            Form fm=(Form)f;
                            FindContextControl(fm, node);  //根据窗体遍历弹出式菜单
                        }
                    }
                }
            }
           
            //遍历弹出式菜单
            public void FindContextControl(Form f, TreeNode pcnode)
            {
                System.Reflection.FieldInfo[] fieldinfo = f.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                for (int i = 0; i < fieldinfo.Length; i++)
                {
                    switch (fieldinfo[i].FieldType.Name)
                    {
                        case "ContextMenuStrip":
                            ContextMenuStrip context = (ContextMenuStrip)fieldinfo[i].GetValue(f);
                            foreach (ToolStripMenuItem tsmi in context.Items)
                            {
                                TreeNode tsminode = new TreeNode();
                                tsminode.Name = tsmi.Name;
                                tsminode.Text = tsmi.Text;
                                pcnode.Nodes.Add(tsminode);
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            public void FindControl(Control ctrl, TreeNode Pnode)
            {
                foreach (Control c in ctrl.Controls)
                {
                    if (c is MenuStrip)     //遍历菜单栏
                    {
                        MenuStrip menu = (MenuStrip)c;
                        foreach (ToolStripMenuItem menuitem2 in menu.Items)
                        {
                            TreeNode cnode = new TreeNode();
                            cnode.Name = menuitem2.Name;
                            cnode.Text = menuitem2.Text;
                            if (menuitem2.DropDownItems.Count > 0)
                            {
                                for (int i = 0; i < menuitem2.DropDownItems.Count; i++)
                                {
                                    TreeNode tnode = new TreeNode();
                                    tnode.Name = menuitem2.DropDownItems[i].Name;
                                    tnode.Text = menuitem2.DropDownItems[i].Text;
                                    cnode.Nodes.Add(tnode);
                                }
                            }
                            Pnode.Nodes.Add(cnode);
                        }
                    }
                    else if (c is ToolStrip)      //遍历工具栏
                    {
                        ToolStrip tool = (ToolStrip)c;
                        foreach (ToolStripItem item in tool.Items)
                        {
                            if (item is ToolStripButton)
                            {
                                TreeNode ttnode = new TreeNode();
                                ttnode.Name = item.Name;
                                ttnode.Text = item.Text;
                                Pnode.Nodes.Add(ttnode);
                            }
                            else if (item is ToolStripDropDownButton )
                            {
                                ToolStripDropDownButton tdb = (ToolStripDropDownButton)item;
                                TreeNode twnode = new TreeNode();
                                twnode.Name = tdb.Name;
                                twnode.Text = tdb.Text;
                                if (tdb.DropDownItems.Count > 0)
                                {
                                    for (int i = 0; i < tdb.DropDownItems.Count; i++)
                                    {
                                        TreeNode tn = new TreeNode();
                                        tn.Name = tdb.DropDownItems[i].Name;
                                        tn.Text = tdb.DropDownItems[i].Text;
                                        twnode.Nodes.Add(tn);
                                    }
                                }
                                Pnode.Nodes.Add(twnode);
                            }
                          }
                    }
                }
            }
    

     转自:http://liujb1982.blog.163.com/blog/static/114911572201011162327637/

  • 相关阅读:
    前端笔记(关于解决打包时报node-sass错误的问题)
    前端笔记(Echarts学习总结)
    前端笔记(近期整理的一些开发备注)
    代码(css3向下箭头指引)
    Hexo 博客利用 Nginx 实现中英文切换
    prefetch 和 preload 及 webpack 的相关处理
    利用 Github 网络钩子实现自动化部署
    使用 Nginx 实现 301 跳转至 https 的根域名
    作为 attribute 和 property 的 value 及 Vue.js 的相关处理
    使用 Vue.js 改写 React 的官方教程井字棋
  • 原文地址:https://www.cnblogs.com/songrun/p/3549275.html
Copyright © 2011-2022 走看看