Listview右键菜单的问题

时间:2021-09-10 17:04:56
首先代码生成人菜单
        private void listView_MouseClick(object sender, MouseEventArgs e)
        {
            if (Program.Usergroup == "工程部" && e.Button == MouseButtons.Right && this .listView .SelectedItems .Count >0)
            {
                ContextMenuStrip cms = new ContextMenuStrip();
                cms.Name = "cms";
                cms.Items.Add("查看原始目录", null);
                cms.Items.Add("修改非标信息", null);
                this.ContextMenuStrip = cms;
                cms.Show(listView,e.Location);
            }
        }
问题:
开始右键是没有菜单的,然后在Listview右键一项后出现菜单,然后不管是在Listview空白的地方还是窗体的任何一个地方右键都会出现这个菜单,好郁闷啊,要怎么样解决这个菜单只能在Listview里面选中行的时候右键才出现?

补充一个问题,可不可以图标从ImageList里面添加,代码怎么写?

12 个解决方案

#1


private ListViewItem GetItemFromPoint(ListView listView, Point mousePosition)
{
    // translate the mouse position from screen coordinates to 
    // client coordinates within the given ListView
    Point localPoint = listView.PointToClient(mousePosition);
    return listView.GetItemAt(localPoint.X, localPoint.Y);
}

判断GetItemFromPoint!=null
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

#2


引用 1 楼 feiyun0112 的回复:
private ListViewItem GetItemFromPoint(ListView listView, Point mousePosition)
{
    // translate the mouse position from screen coordinates to 
    // client coordinates within the given ListView
    Point localPoint = listView.PointToClient(mousePosition);
    return listView.GetItemAt(localPoint.X, localPoint.Y);
}

判断GetItemFromPoint!=null
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
是这样吗?
if (Program.Usergroup == "工程部" && e.Button == MouseButtons.Right && GetItemFromPoint != null)
提示错误:
运算符"!="无法应用于“方法组”和“<null>”类型的操作数

#3


问题解决了:
        private void Form_Load(object sender, EventArgs e)
        {
            ContextMenuStrip cms = new ContextMenuStrip();
            cms.Name = "cms";
            cms.Items.Add("查看原始目录", null);
            cms.Items.Add("修改非标信息", null);
            this.ContextMenuStrip = cms;
            cms.Opening +=new CancelEventHandler(cms_Opening);
        }
        private void cms_Opening(object sender,CancelEventArgs e)
        {
            if (this.listView.SelectedItems.Count == 0) { e.Cancel = true; }
            if (Program.Usergroup != "工程部") { e.Cancel = true; }
        }
不需要listView_MouseClick Listview右键菜单的问题

#4


触发事件  前面先判断是否选中项  没选就return

#5





if (listview.SelectedIndices != null && listview.SelectedIndices.Count>0)

#6


private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (!e.IsSelected)
            {
                ...
              }
}

#7


引用 4 楼 wawd74520 的回复:
这个事件是不是就是那个Opening?
引用 5 楼 happy09li 的回复:
貌似不行,可能是多了前面一句listview.SelectedIndices != null
引用 6 楼 dmz71991 的回复:
几位大大,
1.我提供的解决办法是不是有什么不妥的地方?
2.在ListView选中的情况下,在Listview控件以外的窗体空白处右键也是会有菜单,可以避免吗?是不是还得判断鼠标位置是不是在ListView控件内?代码怎么写?
3.菜单添加项时为ToolStripItemCollection.Add(string text,Image image,EventHandler onClick),能说明一下这三项是怎么添加吗?目前只知道第一项是指菜单显示的文本与第三项是指定发生的事件,第二项图标实在不知道是要怎么添加,请指导一下,谢谢。

#8


listView_MouseClick

#9


            ContextMenuStrip cms = new ContextMenuStrip();
            cms.Name = "cms";
            cms.ImageList = this.toolIcon;
            ToolStripMenuItem mt1 = new ToolStripMenuItem("测试看看");
            mt1.ImageKey = "Search";
            cms.Items.Add(mt1);
            cms.Items.Add("-");
现在知道怎么加图标了 Listview右键菜单的问题

#10


还是想知道鼠标先选中一个后,在空白处不要左键直接右键不要出现菜单

#11


引用 10 楼 mpy2003 的回复:
还是想知道鼠标先选中一个后,在空白处不要左键直接右键不要出现菜单
Listview右键菜单的问题

#12


朕看了这么多。。。居然 懵懵懂懂。。。原谅我年少无知啊!!

#1


private ListViewItem GetItemFromPoint(ListView listView, Point mousePosition)
{
    // translate the mouse position from screen coordinates to 
    // client coordinates within the given ListView
    Point localPoint = listView.PointToClient(mousePosition);
    return listView.GetItemAt(localPoint.X, localPoint.Y);
}

判断GetItemFromPoint!=null
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

#2


引用 1 楼 feiyun0112 的回复:
private ListViewItem GetItemFromPoint(ListView listView, Point mousePosition)
{
    // translate the mouse position from screen coordinates to 
    // client coordinates within the given ListView
    Point localPoint = listView.PointToClient(mousePosition);
    return listView.GetItemAt(localPoint.X, localPoint.Y);
}

判断GetItemFromPoint!=null
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
是这样吗?
if (Program.Usergroup == "工程部" && e.Button == MouseButtons.Right && GetItemFromPoint != null)
提示错误:
运算符"!="无法应用于“方法组”和“<null>”类型的操作数

#3


问题解决了:
        private void Form_Load(object sender, EventArgs e)
        {
            ContextMenuStrip cms = new ContextMenuStrip();
            cms.Name = "cms";
            cms.Items.Add("查看原始目录", null);
            cms.Items.Add("修改非标信息", null);
            this.ContextMenuStrip = cms;
            cms.Opening +=new CancelEventHandler(cms_Opening);
        }
        private void cms_Opening(object sender,CancelEventArgs e)
        {
            if (this.listView.SelectedItems.Count == 0) { e.Cancel = true; }
            if (Program.Usergroup != "工程部") { e.Cancel = true; }
        }
不需要listView_MouseClick Listview右键菜单的问题

#4


触发事件  前面先判断是否选中项  没选就return

#5





if (listview.SelectedIndices != null && listview.SelectedIndices.Count>0)

#6


private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (!e.IsSelected)
            {
                ...
              }
}

#7


引用 4 楼 wawd74520 的回复:
这个事件是不是就是那个Opening?
引用 5 楼 happy09li 的回复:
貌似不行,可能是多了前面一句listview.SelectedIndices != null
引用 6 楼 dmz71991 的回复:
几位大大,
1.我提供的解决办法是不是有什么不妥的地方?
2.在ListView选中的情况下,在Listview控件以外的窗体空白处右键也是会有菜单,可以避免吗?是不是还得判断鼠标位置是不是在ListView控件内?代码怎么写?
3.菜单添加项时为ToolStripItemCollection.Add(string text,Image image,EventHandler onClick),能说明一下这三项是怎么添加吗?目前只知道第一项是指菜单显示的文本与第三项是指定发生的事件,第二项图标实在不知道是要怎么添加,请指导一下,谢谢。

#8


listView_MouseClick

#9


            ContextMenuStrip cms = new ContextMenuStrip();
            cms.Name = "cms";
            cms.ImageList = this.toolIcon;
            ToolStripMenuItem mt1 = new ToolStripMenuItem("测试看看");
            mt1.ImageKey = "Search";
            cms.Items.Add(mt1);
            cms.Items.Add("-");
现在知道怎么加图标了 Listview右键菜单的问题

#10


还是想知道鼠标先选中一个后,在空白处不要左键直接右键不要出现菜单

#11


引用 10 楼 mpy2003 的回复:
还是想知道鼠标先选中一个后,在空白处不要左键直接右键不要出现菜单
Listview右键菜单的问题

#12


朕看了这么多。。。居然 懵懵懂懂。。。原谅我年少无知啊!!