调用DoubleClick处理程序时,带有空SelectedItems的ListView

时间:2013-10-16 11:28:43

标签: c# winforms listview

我有一个WinForm个应用,其中包含ListView,并为其分配了DoubleClick个事件处理程序。 从理论上讲,只有物品可以点击" ,所以不应该输入没有选定项目的事件处理程序,因此它适用于99%的情况。 但是,每隔一段时间,当我的处理程序尝试访问InvalidAgrument时,我会抓住list_view.SelectedItems[0]的例外情况,在那里我看到它实际上是空的。

当我尝试重现时,需要一个积极的点击会话才能完成。但它已经完成了,我有时可以看到光标位于有效实体的中间,这让我怀疑它可能是一些竞争条件。

1 个答案:

答案 0 :(得分:2)

这肯定会出错,双击并不能保证选择一个项目。它也可能取消选择项目,您的代码将崩溃。在添加测试以检查SelectedItems是否为空之前,可能更好的鼠标陷阱是找到双击的确切项目。请改用MouseDoubleClick事件,以便获得鼠标位置,然后使用ListView.HitTest()方法。像这样:

    private void listView1_MouseDoubleClick(object sender, MouseEventArgs e) {
        var item = ((ListView)sender).HitTest(e.Location);
        if (item != null) {
            // etc..
        }
    }