具有空选定项的列表视图,当调用双击处理程序时

本文关键字:调用 双击 处理 程序 视图 列表 | 更新日期: 2023-09-27 18:35:31

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

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

具有空选定项的列表视图,当调用双击处理程序时

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

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