首页 > 其他 > 详细

<转>通过反射获取Form/MenuStrip/ContextMenuStrip等列表

时间:2014-02-15 01:37:53      阅读:318      评论:0      收藏:0      [点我收藏+]
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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!