单击空白区域时未触发ListView鼠标单击事件



我有一个ListView控件,它以网格布局显示文件夹中的文件。我有一个包含三个Items的上下文菜单,其行为应该如下:

  1. 如果用户右键单击ListView中的文件,上下文菜单将显示其所有3个Items
  2. 如果用户右键单击ListView中的空白区域,则上下文视图的第一个Item应该是不可见的

这是我添加事件和ListView:的MouseClick事件代码的地方

this.listviewFiles.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listViewFiles_MouseClick);
private void listViewFiles_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
if (listviewFiles.FocusedItem.Bounds.Contains(e.Location) == true)
{
contextMenuFilesListbox.Items[0].Visible = false;
contextMenuFilesListbox.Items[1].Visible = false;                                      
}
else
{
contextMenuFilesListbox.Items[0].Visible = true;
contextMenuFilesListbox.Items[1].Visible = true;                    
}
contextMenuFilesListbox.Show(Cursor.Position);                
}
}

结果是,当我右键单击listViewFiles_MouseClick中的空白区域时,根本不会触发事件。因此,我无法在上下文菜单中恢复不可见的Item

除非碰到Item标签,否则MouseClick不会工作。MouseDown很好,并且在命中SubItem标签或空白空间(None)时也会触发。

最好使用ListViewHitTestInfo对象来检查您正在命中的内容。

以下是它应该如何工作:

private void listView1_MouseDown(object sender, MouseEventArgs e)
{
ListViewHitTestInfo HI = listView1.HitTest(e.Location);
if (e.Button == MouseButtons.Right)
{
if (HI.Location == ListViewHitTestLocations.None)  
{
contextMenuFilesListbox.Items[0].Visible = false;
contextMenuFilesListbox.Items[1].Visible = false;
}
else
{
contextMenuFilesListbox.Items[0].Visible = true;
contextMenuFilesListbox.Items[1].Visible = true;
}
contextMenuFilesListbox.Show(Cursor.Position);
}
}

最新更新