listView分组及其右键菜单的动态添加
2010-06-28 17:46
465 查看
#region listView分组 imageList1.Images.Add("ImageKey1", Image.FromFile("图片路径")); imageList1.Images.Add("ImageKey2", Image.FromFile("图片路径")); imageList1.Images.Add("ImageKey3", Image.FromFile("图片路径")); imageList1.Images.Add("newImageKey", Image.FromFile("图片路径")); // 关联右键菜单 listView1.ContextMenuStrip = contextMenuStrip1; // 关联imageList listView1.LargeImageList = imageList1; listView1.View = View.LargeIcon; // 设置图片对应的深度值 imageList1.ColorDepth = ColorDepth.Depth32Bit; ListViewItem[] items = new ListViewItem[3]; ListViewGroup group1 = new ListViewGroup("Group1"); ListViewGroup group2 = new ListViewGroup("Group2"); items[0] = new ListViewItem("viewItem1", "ImageKey1", group1); /* 设置listView 项stringKey,这里设置项stringKey的目的是为了后面根据相应状态 * 改变项图片; * 在实际应用中,items的项数往往都是不定的,设置stringKey后,改变图片时便可不用项索引 * 比如通过 listView1.Items["itemStringKey2"].ImageKey = "newImageKey"; * 便可直接改变第2项的图片 */ items[0].Name = "itemStringKey1"; items[1] = new ListViewItem("viewItem2", "ImageKey2", group1); items[1].Name = "itemStringKey2"; items[2] = new ListViewItem("viewItem3", "ImageKey3", group2); items[2].Name = "itemStringKey3"; listView1.Groups.Add(group1); listView1.Groups.Add(group2); listView1.Items.AddRange(items); #endregion #region 右键菜单的动态添加 private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { if (listView1.SelectedItems.Count == 0) //有选中项时才会弹出右键菜单 { e.Cancel = true; return; } } /// <summary> /// 添加右键菜单项 /// </summary> /// <param name="text">要显示的文字,如果为 - 则显示为分割线</param> /// <param name="cms">要添加到的子菜单集合</param> /// <param name="callback">点击时触发的事件</param> /// <returns>生成的子菜单,如果为分隔条则返回null</returns> ToolStripMenuItem AddContextMenu(string text, ToolStripItemCollection cms, EventHandler callback) { if (text == "-") { ToolStripSeparator tsp = new ToolStripSeparator(); cms.Add(tsp); return null; } else if (!string.IsNullOrEmpty(text)) { ToolStripMenuItem tsmi = new ToolStripMenuItem(text, Image.FromFile("图标路径"); if (callback != null) { tsmi.Click += callback; } cms.Add(tsmi); tsmi.Font = new Font("Arial", 9, FontStyle.Regular); //字体设置 //tsmi.Image = Image.FromFile("图标路径"); //菜单图标设置 return tsmi; } return null; } /// <summary> /// 菜单事件 /// </summary> void menuClicked(object sender, EventArgs e) { ToolStripMenuItem stripItem = (ToolStripMenuItem)sender; string parentItemText = stripItem.OwnerItem.Text; MessageBox.Show(parentItemText + stripItem.Text + "事件"); } ToolStripMenuItem subItem; private void listView1_MouseClick(object sender, MouseEventArgs e) { contextMenuStrip1.Items.Clear(); //添加主菜单1 subItem = AddContextMenu("主菜单1", contextMenuStrip1.Items, menuClicked); //添加子菜单 AddContextMenu("子菜单1", subItem.DropDownItems, new EventHandler(menuClicked)); AddContextMenu("子菜单2", subItem.DropDownItems, new EventHandler(menuClicked)); //添加主菜单2 subItem = AddContextMenu("主菜单2", contextMenuStrip1.Items, menuClicked); //添加子菜单 AddContextMenu("子菜单1", subItem.DropDownItems, new EventHandler(menuClicked)); AddContextMenu("子菜单2", subItem.DropDownItems, new EventHandler(menuClicked)); } #endregion
相关文章推荐
- listView分组及其右键菜单的动态添加
- 动态添加菜单项、子菜单、右键菜单
- MFC:在CView(或CScrollView等)界面上动态添加右键菜单
- VC中动态添加菜单及其命令响应函数
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- MFC中动态创建N级菜单以及响应事件——续——动态添加菜单/菜单项、子菜单、右键菜单
- pyqt4,QTableWidget 动态添加控件,添加图片,右键菜单选项
- VB.Net程序设计:动态添加右键菜单和子菜单
- 动态添加/删除Windows资源管理器右键菜单及挂接操作
- DevExpress使用教程:XtraGridControl动态添加右键菜单
- 动态添加菜单/菜单项、子菜单、右键菜单
- WPF如何后台动态添加控件的右键菜单
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- VC中动态添加菜单及其命令响应函数
- 如何动态添加菜单/菜单项、子菜单、右键菜单
- 如何动态添加菜单/菜单项、子菜单、右键菜单
- 如何动态添加菜单/菜单项、子菜单、右键菜单
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- 如何在MFC中动态添加菜单/菜单项、子菜单、右键菜单