如何激活listview项的上下文菜单而不是列标题

时间:2012-03-19 12:28:22

标签: c# winforms listview contextmenu

我的Listview如下

 Header1      Header2      Header3
  Item1        Item2        Item3
  Item1        Item2        Item3
  Item1        Item2        Item3

我已经编写了一个代码,用于在点击context menu时显示list view,但它也在Context menu上显示headers。只有当用户点击Context menu Items时,我才需要显示list view任何人都可以帮助我

这是我目前编写的代码

private void listView1_MouseClick(object sender, MouseEventArgs e)
    {
        contextMenuStrip1.Show(listView1, e.Location);
    }

5 个答案:

答案 0 :(得分:13)

这个怎么样?

private void listView1_MouseClick(object sender, MouseEventArgs e)
    {
        ListView listView = sender as ListView;
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            ListViewItem item = listView.GetItemAt(e.X, e.Y);
            if (item != null)
            {
                item.Selected = true;
                contextMenuStrip1.Show(listView , e.Location);
            }
        }
    }

这会设置它,因此上下文菜单仅显示项目上是否发生了右键单击,因为如果右键单击发生在标题或其他内容上,则项目将为null。希望它有所帮助

答案 1 :(得分:9)

这对你有用

private void listView1_MouseClick(object sender, MouseEventArgs e)
    {            
        if (e.Button == MouseButtons.Right)
        {
            if (listView1.FocusedItem.Bounds.Contains(e.Location) == true)
            {
                contextMenuStrip1.Show(Cursor.Position);
            }
        } 
    }

Bounds”属性是一个矩形,表示“FocusedItem”的边缘(以像素为单位)。因此,如果鼠标右键单击时光标位于此矩形区域,则显示“contextMenuStrip1”。

答案 2 :(得分:5)

如果没有选择任何项目,您可以取消查看上下文菜单,只有右键单击项目才有效

    /// <summary>
    /// ContextMenuStrip Opening Action
    /// </summary>
    private void listContextMenuStrip_Opening(object sender, CancelEventArgs e)
    {
        // If there are no items selected, cancel viewing the context menu
        if (connectionListView.SelectedItems.Count <= 0)
        {
            e.Cancel = true;
        }
    }

答案 3 :(得分:0)

这很脏......只是使用手边的信息。有人可能会得到更好的答案。

private void listView1_MouseClick(object sender, MouseEventArgs e)
{
    if ( e.Location.Y > headerHeightDefinedEarlier )
        contextMenuStrip1.Show(listView1, e.Location);
}

答案 4 :(得分:0)

当您点击它时,您应该选择该项目。然后,您可以在列表中询问选定项目并获取所选元素索引:listView1.SelectedItems[0].Index

if (listView1.SelectedItems[0].Index == 0)
return;