用户名: 密   码:
   飞诺网 加入收藏
飞诺网 网站开发 VBScript ASP Asp.net Jsp php XML CGI-Perl 搜索引擎 ajax web技术
.net系列教程 .net实例 .Net技术文档

您当前的位置:飞诺网 >> .net >> .net实例

应用程序中有个menustrip菜单,遍历菜单下的所有菜单及所有form、form中的控件,并把所有窗体跟控件显示到一个treeview中的相应的菜单名下

www.diybl.com    时间 : 2011-08-03  作者:佚名   编辑:hawk 点击:   [ 评论 ]


 

        #region//遍历MenuStrip所有子菜单并显示到树上,同时判断每个子菜单下是否有子窗体,是调用 TraverseFormBDTree方法将其窗体及其控件名显示到treeview中
        /// <summary>
        /// 遍历MenuStrip所有子菜单并显示到树上,同时判断每个子菜单下是否有子窗体,是调用 TraverseFormBDTree方法将其窗体及其控件名显示到treeview中
        /// </summary>
        /// <param name="ctrl">是带有Menustrip的一个Form窗体</param>
        public void TraverseMenu(Control ctrl)
        {
            foreach (Control c in ctrl.Controls)//遍历窗体中的控件
            {
                //toolbar1(c);
                if (c is MenuStrip)//判断控件是否为Menustrip
                {


                    MenuStrip menu = (MenuStrip)c;

                    foreach (ToolStripMenuItem MenuItem2 in menu.Items)//遍历menustrip的 一级菜单并将其显示到树上
                    {

                        treeView1.Nodes.Add(MenuItem2.Name, MenuItem2.Text);

                        if (TraverseForm(MenuItem2.Text.Trim()) == true)//调用方法TraverseForm判断是否存在窗体
                        {
                            TraverseFormBDTree(MenuItem2.Text, treeView1.Nodes[MenuItem2.Name]);//存在调用方法TraverseFormBDTree

                        }
                        else
                        {
                            for (int i = 0; i < MenuItem2.DropDownItems.Count; i++)//遍历menustrip遍历二级菜单
                            {
                                treeView1.Nodes[MenuItem2.Name].Nodes.Add(MenuItem2.DropDownItems[i].Name, MenuItem2.DropDownItems[i].Text);
                                if (TraverseForm(MenuItem2.DropDownItems[i].Text) == true)
                                {
                                    TraverseFormBDTree(MenuItem2.DropDownItems[i].Text, treeView1.Nodes[MenuItem2.Name].Nodes[MenuItem2.DropDownItems[i].Name]);
                                }
                            }
                        }

                    }


                }

            }
        }

        #endregion

        #region//获取当前应用程序所有的form窗体并传入菜单中的菜单显示值做为判断条件,如果传入的值可以找到相应窗体返回True,否者返回false
        /// <summary>
        /// 获取当前应用程序所有的form窗体并传入菜单中的菜单显示值做为判断条件,如果传入的值可以找到相应窗体返回True,否者返回false
        /// </summary>
        /// <param name="Str">这里是menustrip中一个item的显示值</param>
        /// <returns>返回值为true表示能找到相应窗体</returns>
        public bool TraverseForm(string Str)
        {
            Assembly a = Assembly.LoadFile(Application.ExecutablePath);//.net中的反射
            Type[] types = a.GetTypes();
            foreach (Type t in types)
            {
                if (t.BaseType.Name == "Form")
                {
                    Form f = (Form)Activator.CreateInstance(t, true);

                    if (f != null)
                    {
                        // MessageBox.Show(f.Text);
                        if (f.Text == Str)
                        {

                            return true;
                        }

                    }
                }
            }
            return false;
        }

        #endregion

        #region//递归遍历一个Form中的控件是否为button,或者是toopstrip中的toolstripbutton,如果是将基显示到树上,
        /// <summary>
        /// 递归遍历一个Form中的控件是否为button,或者是toopstrip中的toolstripbutton,如果是将基显示到树上,
        /// </summary>
        /// <param name="ctrl">窗体的控件</param>
        /// <param name="treenode">一个treeview的结点</param>
        private void TraverseFormCtrlAndBindTree(Control ctrl, TreeNode treenode)
        {

            foreach (Control c in ctrl.Controls)//遍历窗体中的控件
            {
                if (c is TabControl)  //判断是否为TabControl
                {
                    TabControl tc = (TabControl)c;//将c强强制转为为TabControl类型
                    foreach (TabPage tp in tc.TabPages)//遍历TabControl中的TabPage选项
                    {
                        treenode.Nodes.Add(tp.Name, tp.Text);//将名称赋值到treeview结点上。
                        TraverseFormCtrlAndBindTree(tp, treenode.Nodes[tp.Name]);//递归调用TraverseFormCtrlAndBindTree,遍历下级控件
                    }

                }
                else
                {

                    if (c is Button)  //判断是否为Button
                    {
                        treenode.Nodes.Add(c.Name, c.Text);
                        TraverseFormCtrlAndBindTree((Button)c, treenode.Nodes[c.Name]);
                    }
                    else
                        if (c is ToolStrip) //判断是否为ToolStrip
                        {
                            ToolStrip TB = (ToolStrip)c;

                            for (int i = 0; i < TB.Items.Count; i++)
                            {
                                //MessageBox.Show(TB.Items[i].GetType().ToString());
                                if (TB.Items[i].GetType().ToString() == "System.Windows.Forms.ToolStripButton")//判断是否为ToolStripButton
                                {
                                    treenode.Nodes.Add(TB.Items[i].Name, TB.Items[i].Text);
                                }
                            }
                        }
                        else
                        {

                            //try
                            //{
                            TraverseFormCtrlAndBindTree(c, treenode);
                            //}
                            //catch
                            //{
                            //    MessageBox.Show(c.GetType().ToString());
                            //}

                        }

                }
            }

        }
        #endregion


 

如果图片或页面不能正常显示请点击这里
.net实例推荐文章

文章评论