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