怎么在ListView里添加不同的右键菜单

浩洁 2013-12-05 09:22:41
添加单个的菜单我知道怎么添加,但是针对ListView不同的组添加不同的多个右键菜单就难到了。首先说明一下是动态添加,不是拖入控件的方式
       ContextMenuStrip cmsA = new ContextMenuStrip();
cmsA.ImageList = this.toolIcon;
/* 添加A菜单*/
this.ContextMenuStrip = cmsA;
cmsA.Opening += new CancelEventHandler(cmsA_Opening);

ContextMenuStrip cmsB = new ContextMenuStrip();
cmsA.ImageList = this.toolIcon;
/* 添加B菜单*/
this.ContextMenuStrip = cmsB;
cmsB.Opening += new CancelEventHandler(cmsB_Opening);

ContextMenuStrip cmsC = new ContextMenuStrip();
cmsC.ImageList = this.toolIcon;
/* 添加C菜单*/
this.ContextMenuStrip = cmsC;
cmsC.Opening += new CancelEventHandler(cmsC_Opening);
不知道是不是这一句有问题?this.ContextMenuStrip =。。。,在ListView中引用的时候是判断是在A组就调用A菜单,依此类推,我应该怎么写?
...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-12-05
  • 打赏
  • 举报
回复
引用 4 楼 mpy2003 的回复:
引用 3 楼 caozhy 的回复:
[quote=引用 2 楼 mpy2003 的回复:] [quote=引用 1 楼 caozhy 的回复:]
谢谢版主的帮助,另外一个问题,如果我的菜单项都通过数据库查找得来的数据,这样每次ListView Selected更改又要查询一次数据库是不是会影响效果?所以我想改在窗体Load事件里只加载一次,该怎么操作?
你可以只创建一次,放在List<MenuStripItem>集合中,然后直接从集合中加载。[/quote]请问一下怎么用这种集合?怎么往里面加再从里面取?[/quote] foreach (var item in list) { cms.Items.Add(item); }
浩洁 2013-12-05
  • 打赏
  • 举报
回复
再次谢谢版主
浩洁 2013-12-05
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
引用 2 楼 mpy2003 的回复:
[quote=引用 1 楼 caozhy 的回复:]
谢谢版主的帮助,另外一个问题,如果我的菜单项都通过数据库查找得来的数据,这样每次ListView Selected更改又要查询一次数据库是不是会影响效果?所以我想改在窗体Load事件里只加载一次,该怎么操作?
你可以只创建一次,放在List<MenuStripItem>集合中,然后直接从集合中加载。[/quote]请问一下怎么用这种集合?怎么往里面加再从里面取?
threenewbee 2013-12-05
  • 打赏
  • 举报
回复
引用 2 楼 mpy2003 的回复:
引用 1 楼 caozhy 的回复:
谢谢版主的帮助,另外一个问题,如果我的菜单项都通过数据库查找得来的数据,这样每次ListView Selected更改又要查询一次数据库是不是会影响效果?所以我想改在窗体Load事件里只加载一次,该怎么操作?
你可以只创建一次,放在List<MenuStripItem>集合中,然后直接从集合中加载。
浩洁 2013-12-05
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
谢谢版主的帮助,另外一个问题,如果我的菜单项都通过数据库查找得来的数据,这样每次ListView Selected更改又要查询一次数据库是不是会影响效果?所以我想改在窗体Load事件里只加载一次,该怎么操作?
threenewbee 2013-12-05
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            listView1.View = View.Details;
            listView1.FullRowSelect = true;
            listView1.Columns.Add("Item", 500);
            listView1.Items.Add("1");
            listView1.Items.Add("2");
            ContextMenuStrip cms = new ContextMenuStrip();
            listView1.ContextMenuStrip = cms;
            cms.Opening += new CancelEventHandler(cms_Opening);
        }

        void cms_Opening(object sender, CancelEventArgs e)
        {
            if (listView1.SelectedItems.Count == 0 || listView1.SelectedItems[0].Text == "1")
            {
                (sender as ContextMenuStrip).Items.Clear();
                (sender as ContextMenuStrip).Items.Add("1", null, (a, b) => MessageBox.Show("1"));
            }
            else
            { 
                (sender as ContextMenuStrip).Items.Clear();
                (sender as ContextMenuStrip).Items.Add("2", null, (a, b) => MessageBox.Show("2"));
            }
        }
    }
}
新建一个winforms项目,放一个listview 编写如上代码 运行。

110,546

社区成员

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

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

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