1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 |
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/
<转>通过反射获取Form/MenuStrip/ContextMenuStrip等列表
原文:http://www.cnblogs.com/songrun/p/3549275.html