我给 ListView 指定了一个 ContextMenu, 但是,它在ListView 的任意空白区域点右键,都会弹出菜单,
而我的想法是,
1,必须在选中了ListView 的 Item 的时候,才弹出。
2,我想在弹出的时候,设置哪些菜单项可用,哪些变灰,
请高手指点!

解决方案 »

  1.   

    先不要给 ListView 指定了一个 ContextMenu:        private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
            {
                // 做相应"哪些菜单项可用,哪些变灰"处理
                // 动态弹出 ContextMenu
            }
      

  2.   

    在nodemousedown 事件里判断是否是右击事件,如果是的话,在根据当前节点的属性,显示你需要的菜单以及菜单的enabled属性, 菜单显示的位置使用相对于这个控件的位置
    简单代码如下 if (e.Button == MouseButtons.Right)
                    this.contextMenuStripCollector.Show(this.advTreeCollector, e.X, e.Y);
      

  3.   

    右键的时候首先判断是否有选中节点listView1.selectedItem.count  若count>0则允许弹出右键菜单
      

  4.   


    没有 NodeMouseDown事件吧?
      

  5.   

    在各位的提示下,已经搞定!
            private void listView2_MouseUp(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    if( listView2.SelectedItems.Count>0 )  //是否在节点上点击的右键
                    {
                        contextMenuFile.Show( listView2.PointToScreen(e.Location));
                    }
                }
            }