VS2008 WinForm中通过反射遍历程序中的窗体及窗体上的控件

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);
                        }
                      }
                }
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值