Winforms ListView MouseUp事件触发不止一次

本文关键字:不止一次 事件 ListView MouseUp Winforms | 更新日期: 2023-09-27 18:18:18

在我的。net 4.5 Winforms应用程序中,当我从该事件打开文件时,ListView控件的MouseUp事件会触发多次,如下所示:

private void ListView1_MouseUp(object sender, MouseEventArgs e)
{
   ListViewHitTestInfo hit = ListView1.HitTest(e.Location);
   if (hit.SubItem != null && hit.SubItem == hit.Item.SubItems[1])
   {
      System.Diagnostics.Process.Start(@"C:'Folder1'Test.pdf");
      MessageBox.Show("A test");
   }
}

注意:当单击listview的SubItem1时,文件打开,但消息框至少出现两次。但是,当我注释掉打开文件的行时,消息框只出现一次(应该如此)。我确实需要打开列表视图中用户单击的文件名。我如何在没有MoueUp事件多次触发的情况下实现这一点?还请注意,listview的MouseClick事件并不总是像这里所说的那样工作。因此,我必须使用MouseUp事件

编辑:我应该提到ListView是在细节模式

Winforms ListView MouseUp事件触发不止一次

避免使用HitTest(),使用ListView的原生函数GetItemAt()。来自MSDN的示例如下:

private void ListView1_MouseDown(object sender, MouseEventArgs e)
{
    ListViewItem selection = ListView1.GetItemAt(e.X, e.Y);
    // If the user selects an item in the ListView, display 
    // the image in the PictureBox. 
    if (selection != null)
    {
        PictureBox1.Image = System.Drawing.Image.FromFile(
            selection.SubItems[1].Text);
    }
}