gpt4 book ai didi

c# - .NET:ListView 蓝调?

转载 作者:行者123 更新时间:2023-11-30 12:54:07 24 4
gpt4 key购买 nike

选择计数,.SelectedItems.Count,当Selected 属性在 Items 中的项目上设置为 trueListView 的集合。

例子:

  lvPept.SelectedItems.Clear()
lvPept.Items(6).Selected = True
Dim newLen As Integer = lvPept.SelectedItems.Count

lvPept 是一个 ListView,包含 10 个元素。

newLen 本来应该是1,但是出问题的时候是0SelectedIndexChanged 事件被触发。和其他数据集如预期的那样为 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工作室版本 (2005/2008)。

其他上下文:该应用程序是用 VB.NET 编写的,并且C# 并且是一个 Windows 窗体应用程序。的源代码有问题的类(class)在http://shrinkster.com/14bg .这ListView 所在的表单类最初是生成的通过最早的 Visual Studio 官方版本之一支持.NET,ca。 2002.

更新 1:因为我有一个工作箱和一个损坏的箱子,所以我比较了lvPept的内容。唯一的区别除了属性“Handle”、“MousePosition”和“TopItem”(因为它是具有不同肽的不同蛋白质)是属性(property)“创建”。对于破损的箱子,这是错误的。这说得通部分构造的对象无法正常运行,但这怎么可能发生呢?

更新 2:属性“Created”被证明是错误的好的领导。我认为真正的问题是在构建 时间而不是表单加载 时间。我现在有了为属性“已创建”添加 ASSERT,重构和更改所有操作都在表单加载时发生。现在可以了正如预期的那样,有问题的用户得到了一个新的应用程序的版本。

自从应用程序发布以来,旧的错误方法就一直存在成立于 2002 年。我只是想知道是否有些专家可以阐明为什么它在 99.9% 的时间内都有效,而且只有在少数情况下失败并且可重现。

最佳答案

这很有趣。

我认为唯一可能导致这种情况发生的情况是,如果 ListView 没有意识到 ListItem 已经更改了它的“选定”值,因此不会更新其选定的项目集合。

.SelectedItems 属性不一定在您每次获取该属性时生成 - 如果您反射(reflect) System.Windows.Forms 程序集:

    if (this.selectedListViewItemCollection == null)
{
this.selectedListViewItemCollection = new SelectedListViewItemCollection(this);
}
return this.selectedListViewItemCollection;

所以我倾向于认为您得到的是过时的 selectedListViewItemCollection。

我会尝试不在项目级别更改 Selected 属性,而是尝试将所选索引添加到 ListView 的 .SelectedIndices 属性,看看是否可行。这样 ListView 就不会依赖于获取 ListViewItem 更改。

关于c# - .NET:ListView 蓝调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/535148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com