在我的.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");
}
}
注意:单击列表视图的子项1时,文件将打开,但消息框将至少出现两次。但是,当我注释掉打开文件的行时,消息框只出现一次(应该如此)。我需要打开列表视图中用户点击其名称的文件。如果没有多次激活MoueUp事件,我怎样才能实现这一目标? 另请注意,listview的MouseClick事件并不总是像stated here一样工作。所以,我必须使用MouseUp事件。
编辑:我应该提到ListView处于详细信息模式。
答案 0 :(得分:2)
避免使用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);
}
}