C#动态生成子菜单(以IE收藏夹菜单为例)

本文介绍了一个用于动态生成收藏夹菜单的C#程序片段。该程序能够读取系统收藏夹中的文件和文件夹,并将它们作为菜单项添加到指定的ToolStripMenuItem中。通过递归的方式处理每个文件夹内的文件及子文件夹,最终实现一个完整的收藏夹菜单结构。

 

public void FavorMenuItem()                 //动态生成收藏夹菜单
        {
           try
           {
               string favorfolder = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);        //获取系统收藏夹路径
               ListMenuItem(收藏夹ToolStripMenuItem, new DirectoryInfo(favorfolder));               //引用生成收藏夹菜单的函数,                                                                        这个收藏夹ToolStripMenuItem参数是指向你要加入菜单的父菜单
           }
           catch (System.Exception ex)
           {
               throw ex;
           }
           
        }

        public void ListMenuItem(ToolStripMenuItem toolstripmenuitem,FileSystemInfo info)             //生成收藏夹菜单的函数,递归使用
        {          
            if (!info.Exists) return;
            DirectoryInfo dir = info as DirectoryInfo;
            //不是目录
            if (dir == null) return;

            FileSystemInfo[] files = dir.GetFileSystemInfos();
            ToolStripMenuItem[] ShouCangsMenuItem = new ToolStripMenuItem[files.Length];
            for (int i = 0; i < files.Length; i++)
            {
               
                FileInfo file = files[i] as FileInfo;                               
                ShouCangsMenuItem[i] = new System.Windows.Forms.ToolStripMenuItem();        
                ShouCangsMenuItem[i].Click += new EventHandler(ShouCangsMenuItem_Click);          //为生成的子菜单添加单击消息(可写一个消息处理函数,这里就不例出来了)
                //是文件
                if (file !=null)
                {
                    string str = file.Name;             //获取收藏夹的文件名(都是URL文件)
                    str = str.Remove(str.Length - 4);     //去掉.url后缀名

                    ShouCangsMenuItem[i].Text = str;          //然后赋值给菜单文本
                    toolstripmenuitem.DropDownItems.Add(ShouCangsMenuItem[i]);   //生成的子菜单添加到上一级菜单
                }               
                //对于子目录,进行递归调用
                else
                {
                    DirectoryInfo Direct = files[i] as DirectoryInfo;                   
                    ShouCangsMenuItem[i].Text = files[i].Name;                      
                    toolstripmenuitem.DropDownItems.Add(ShouCangsMenuItem[i]);       //生成的子菜单添加到上一级菜单
                    ListMenuItem(ShouCangsMenuItem[i], new DirectoryInfo(Direct.FullName));   //递归使用,生成子菜单
                }
            }
          
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值