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

dis*_*kid 0 c# events listview contextmenu winforms

我有一个ListView控件,以网格布局显示文件夹内的文件。我有一个上下文菜单,其中有三个Items应具有以下功能:

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

这是我想补充我的事件,并为代码MouseClick我的事件ListView

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);                
    }
}
Run Code Online (Sandbox Code Playgroud)

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

TaW*_*TaW 6

MouseClick不会工作,除非你打的Item标签。该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);
    }
}
Run Code Online (Sandbox Code Playgroud)