我的MenuStrip有许多个 ToolStripMenuItem.
第一层有"基本信息管理,人事管理,备忘记录等";
第一层的第一项(基本信息管理)有"基础数据,员工信息提示"两项.其中每一项都是很多子项.
以此类推.
我想要的是直接遍历,直接要最底层的 ToolStripMenuItem.请问怎么做?
大家应该懂我要说的.
谢谢....

解决方案 »

  1.   

    我觉得应该有很多方法.我想到的很笨的方法是,想 TreeNode那样,如果没有子节点,则为想要的结果....
      

  2.   

    不懂我说什么?还是?
    我的需求不难哈,只所以我这样做,是因为我把有用的代码,都放在底层的 ToolStripMenuItem,你懂的...
      

  3.   

    也貌似只有这样了,刚没有人回,不过写完了,但是没有优化,目前;
    //用户权限设置.
            void UserPopeControl() {
                var popes = from u in _Linq.T_UserPopes  //根据Id获得当前登录的用户.
                            where u.FId == _UserId
                            select new {
                                PopeName = u.FPopeName,
                                NPope = u.FnPope
                            };
                foreach(var p in popes) {
                    foreach(ToolStripDropDownItem item in _Items) {
                        if(item.Tag != null && item.Tag.ToString() == p.PopeName) { //找到权限名称. 
                            item.Enabled = p.NPope == 0 ? false : true; //权限标志位0为不可用.
                            break;  //找到后退出当前循环,继续查找.
                        }
                    }
                }
            }
            //递归遍历,查找最底层菜单.
            void RecursionBottonItem(ToolStripDropDownItem item) {
                if(item.DropDownItems.Count == 0) { //底层菜单.
                    _Items.Add(item);
                    return;
                }
                else {
                    foreach(ToolStripDropDownItem subItem in item.DropDownItems) {  //非底层菜单.
                        RecursionBottonItem(subItem);
                    }
                }
            }
            private void F_Main_Load(object sender, EventArgs e) {
                _Linq = new Linq.LinqToUserDataContext();   //实例化连接对象. 
                _Items = new List<ToolStripDropDownItem>();            foreach(ToolStripMenuItem menu in menuStrip1.Items) {   //一级菜单.
                    foreach(ToolStripDropDownItem subMenu in menu.DropDownItems) {  //一级菜单下的子菜单.
                        RecursionBottonItem(subMenu);   //统一底层子菜单.
                    }
                }
                UserPopeControl();  //设置用于权限.
            }
    有"权限名称"和"标志",即0表示没有权限,否则有权限.
    因为我试过全部放到一个递归方法中,感觉好麻烦,所以用List统一装"底层菜单".但是貌似时间复杂度变高了...