<转>通过反射获取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/

你可能感兴趣的:(contextMenu)