我的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);
}
答案 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;