【问题标题】:ListView MouseClick event not triggered when clicking on empty areas单击空白区域时未触发 ListView MouseClick 事件
【发布时间】:2015-07-08 20:59:41
【问题描述】:

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

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

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

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

【问题讨论】:

  • 尝试为列表视图使用透明背景
  • @HosseinNarimaniRad 是否有可能拥有一个 BackColor 属性为 Color.TransparentListView
  • 我以为你正在开发 WPF!

标签: c# winforms listview events contextmenu


【解决方案1】:

除非您点击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);
    }
}

【讨论】:

    猜你喜欢
    • 2015-12-04
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多