Winform的MenuStrip如何获得最底层的 ToolStripMenuItem?

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


谢谢....
...全文
232 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wonkju 2013-08-16
  • 打赏
  • 举报
回复
引用 5 楼 hwenycocodq520 的回复:
递归不就行了吗
也貌似只有这样了,刚没有人回,不过写完了,但是没有优化,目前;
//用户权限设置.
        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统一装"底层菜单".但是貌似时间复杂度变高了...
智商余额不足 2013-08-15
  • 打赏
  • 举报
回复
递归不就行了吗
wonkju 2013-08-15
  • 打赏
  • 举报
回复
这个问题都难倒大家了?
wonkju 2013-08-15
  • 打赏
  • 举报
回复
引用 1 楼 vb763305825 的回复:
不懂
不懂我说什么?还是? 我的需求不难哈,只所以我这样做,是因为我把有用的代码,都放在底层的 ToolStripMenuItem,你懂的...
wonkju 2013-08-15
  • 打赏
  • 举报
回复
我觉得应该有很多方法.我想到的很笨的方法是,想 TreeNode那样,如果没有子节点,则为想要的结果....
  • 打赏
  • 举报
回复
不懂

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧