选择计数.SelectedItems.Count
在何时不会改变
对Selected
中的项目Items
属性设置为true
收集ListView
。
示例:
lvPept.SelectedItems.Clear()
lvPept.Items(6).Selected = True
Dim newLen As Integer = lvPept.SelectedItems.Count
lvPept
是ListView
,包含10个元素。
newLen
预计为1,但问题发生时为0
并且SelectedIndexChanged
事件是 不 被解雇。同
其他数据集如预期的那样是1和
SelectedIndexChanged事件被触发。
lvPept
可以处于什么样的情况或状态
为了这个发生? BeginUpdate
()/ EndUpdate
() 不
与lvPept
一起使用。
背景:
我正在尝试追踪我的一个用户的问题 开源.NET应用程序,MSQuant 遇到了(http://msquant.sourceforge.net/)。
我已经不知道可能是什么原因 问题
这个问题是可以重现的,我可以在我的网站上重现它 开发环境,Visual Studio 2008.似乎是 独立于Windows版本(Windows 2000 / Windows XP 32位/ Windows XP 64位),.NET运行时版本(2.0 / 3.5)和Visual Studio版(2005/2008)。
其他上下文:应用程序是用VB.NET编写的
C#并且是Windows窗体应用程序。的源代码
有问题的课程是http://shrinkster.com/14bg。该
最初生成ListView
所在的表单类
通过最早的Visual Studio官方版本之一
支持.NET,ca。 2002。
更新1:因为我有工作案例和破案案我
比较了lvPept
的内容。唯一的区别
属性“Handle”,“MousePosition”和“TopItem”除外
(因为它是具有不同肽的不同蛋白质)是属性
“创建”。破碎的案子是假的。这说得通
部分构造的对象无法正常运行,
但它怎么会发生呢?
更新2:属性“已创建”为假,结果为a 良好的领导。我认为真正的问题是这样做 构建时间而不是表单加载时间。我现在有了 为“已创建”,重构和更改的属性添加了ASSERT 在表单加载时发生的所有操作。它现在有效 正如预期的那样,有问题的用户得到了新的 应用程序的版本。
自应用程序以来,旧的糟糕方式就在那里 在2002年成立。我只是想知道是否有专家可以 重点介绍为什么它99.9%的时间只能工作 在少数情况下失败并且可重复。
答案 0 :(得分:1)
这是一个有趣的。
我认为唯一能让这种情况发生的事情是ListView没有意识到ListItem已经改变了它的“Selected”值,因此不会更新它所选择的项目集合。
每次获取属性时都不一定会生成.SelectedItems属性 - 如果您反映System.Windows.Forms程序集:
if (this.selectedListViewItemCollection == null)
{
this.selectedListViewItemCollection = new SelectedListViewItemCollection(this);
}
return this.selectedListViewItemCollection;
所以我倾向于认为你得到了一个过时的selectListViewItemCollection。
我会尝试而不是在Item级别更改Selected属性,而是尝试将所选索引添加到ListView的.SelectedIndices属性中,看看是否有效。这样,ListView不依赖于拾取ListViewItem更改。
答案 1 :(得分:0)
我相信您还必须调用ListView.Select()才能触发SelectedIndexChanged事件。
lvPept.SelectedItems.Clear()
lvPept.Items(6).Selected = True
lvPept.Select()
Dim newLen As Integer = lvPept.SelectedItems.Count