我有一个WinForm
个应用,其中包含ListView
,并为其分配了DoubleClick
个事件处理程序。
从理论上讲,只有物品可以点击" ,所以不应该输入没有选定项目的事件处理程序,因此它适用于99%的情况。
但是,每隔一段时间,当我的处理程序尝试访问InvalidAgrument
时,我会抓住list_view.SelectedItems[0]
的例外情况,在那里我看到它实际上是空的。
当我尝试重现时,需要一个积极的点击会话才能完成。但它已经完成了,我有时可以看到光标位于有效实体的中间,这让我怀疑它可能是一些竞争条件。
答案 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..
}
}