listView分组及其右键菜单的动态添加

  1. #region listView分组   
  2.           imageList1.Images.Add("ImageKey1", Image.FromFile("图片路径"));  
  3.           imageList1.Images.Add("ImageKey2", Image.FromFile("图片路径"));  
  4.           imageList1.Images.Add("ImageKey3", Image.FromFile("图片路径"));  
  5.           imageList1.Images.Add("newImageKey", Image.FromFile("图片路径"));  
  6.   
  7.           // 关联右键菜单   
  8.           listView1.ContextMenuStrip = contextMenuStrip1;  
  9.           // 关联imageList   
  10.           listView1.LargeImageList = imageList1;  
  11.           listView1.View = View.LargeIcon;  
  12.           // 设置图片对应的深度值   
  13.           imageList1.ColorDepth = ColorDepth.Depth32Bit;  
  14.   
  15.           ListViewItem[] items = new ListViewItem[3];  
  16.   
  17.           ListViewGroup group1 = new ListViewGroup("Group1");  
  18.           ListViewGroup group2 = new ListViewGroup("Group2");  
  19.   
  20.           items[0] = new ListViewItem("viewItem1""ImageKey1", group1);  
  21.           /* 设置listView 项stringKey,这里设置项stringKey的目的是为了后面根据相应状态 
  22.            * 改变项图片; 
  23.            * 在实际应用中,items的项数往往都是不定的,设置stringKey后,改变图片时便可不用项索引 
  24.            * 比如通过 listView1.Items["itemStringKey2"].ImageKey = "newImageKey"; 
  25.            * 便可直接改变第2项的图片 */  
  26.           items[0].Name = "itemStringKey1";  
  27.           items[1] = new ListViewItem("viewItem2""ImageKey2", group1);  
  28.           items[1].Name = "itemStringKey2";  
  29.           items[2] = new ListViewItem("viewItem3""ImageKey3", group2);  
  30.           items[2].Name = "itemStringKey3";  
  31.   
  32.           listView1.Groups.Add(group1);  
  33.           listView1.Groups.Add(group2);  
  34.   
  35.           listView1.Items.AddRange(items);  
  36. #endregion  
  37.  
  38. #region 右键菜单的动态添加   
  39.       private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)  
  40.       {  
  41.           if (listView1.SelectedItems.Count == 0) //有选中项时才会弹出右键菜单   
  42.           {  
  43.               e.Cancel = true;  
  44.               return;  
  45.           }  
  46.       }  
  47.       /// <summary>    
  48.       /// 添加右键菜单项   
  49.       /// </summary>    
  50.       /// <param name="text">要显示的文字,如果为 - 则显示为分割线</param>    
  51.       /// <param name="cms">要添加到的子菜单集合</param>    
  52.       /// <param name="callback">点击时触发的事件</param>    
  53.       /// <returns>生成的子菜单,如果为分隔条则返回null</returns>    
  54.       ToolStripMenuItem AddContextMenu(string text, ToolStripItemCollection cms, EventHandler callback)  
  55.       {  
  56.           if (text == "-")  
  57.           {  
  58.               ToolStripSeparator tsp = new ToolStripSeparator();  
  59.               cms.Add(tsp);  
  60.   
  61.               return null;   
  62.           }  
  63.           else if (!string.IsNullOrEmpty(text))  
  64.           {  
  65.               ToolStripMenuItem tsmi = new ToolStripMenuItem(text, Image.FromFile("图标路径");   
  66.               if (callback != null)  
  67.               {  
  68.                   tsmi.Click += callback;  
  69.               }  
  70.               cms.Add(tsmi);  
  71.   
  72.               tsmi.Font = new Font("Arial", 9, FontStyle.Regular); //字体设置   
  73.               //tsmi.Image = Image.FromFile("图标路径"); //菜单图标设置   
  74.   
  75.               return tsmi;  
  76.           }  
  77.           return null;  
  78.       }  
  79.       /// <summary>   
  80.       /// 菜单事件   
  81.       /// </summary>   
  82.       void menuClicked(object sender, EventArgs e)  
  83.       {  
  84.           ToolStripMenuItem stripItem = (ToolStripMenuItem)sender;  
  85.           string parentItemText = stripItem.OwnerItem.Text;  
  86.           MessageBox.Show(parentItemText + stripItem.Text + "事件");  
  87.       }  
  88.   
  89.       ToolStripMenuItem subItem;  
  90.       private void listView1_MouseClick(object sender, MouseEventArgs e)  
  91.       {  
  92.           contextMenuStrip1.Items.Clear();  
  93.           //添加主菜单1   
  94.           subItem = AddContextMenu("主菜单1", contextMenuStrip1.Items, menuClicked);  
  95.           //添加子菜单   
  96.           AddContextMenu("子菜单1", subItem.DropDownItems, new EventHandler(menuClicked));  
  97.           AddContextMenu("子菜单2", subItem.DropDownItems, new EventHandler(menuClicked));  
  98.   
  99.           //添加主菜单2   
  100.           subItem = AddContextMenu("主菜单2", contextMenuStrip1.Items, menuClicked);  
  101.           //添加子菜单   
  102.           AddContextMenu("子菜单1", subItem.DropDownItems, new EventHandler(menuClicked));  
  103.           AddContextMenu("子菜单2", subItem.DropDownItems, new EventHandler(menuClicked));  
  104.       }  
  105. #endregion  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值