您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: