当 ListView 处于虚拟模式时,如何枚举它?

发布于 2024-11-07 00:02:30 字数 354 浏览 0 评论 0原文

当ListView处于虚拟模式时如何枚举它?

我正在使用 OfType<>() 方法来枚举列表视图项。但它会抛出异常,例如列表视图处于虚拟模式时无法枚举。

这是我的代码

List<String> lst= myListView.Items.OfType<ListViewItem>().Select(X=>X.Text).ToList(); 

那么当 ListView 处于虚拟模式时,如何从 ListView 中获取项目?

请给我发布一种使用 .OfType<> 的方法

提前致谢

How to enumerate a ListView when it is in virtual mode ?

I'm using OfType<>() method to enumerate the list view items. But its throwing an exception like, the list view can not be enumerated when it is in virtual mode.

Here is my code

List<String> lst= myListView.Items.OfType<ListViewItem>().Select(X=>X.Text).ToList(); 

So how do i get the item from the ListView when it is in Virtual mode?

Please post me a way to use .OfType<>

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

悲喜皆因你 2024-11-14 00:02:30

当处于虚拟模式时,您无法将项目从列表视图中取出,因为这些项目不在列表视图中。这就是虚拟模式的全部意义。

相反,您按住项目,列表视图会询问显示项目所需的信息。如果您在虚拟模式下成功操作列表视图,那么几乎可以肯定您已经在列表中的某个位置有了这些项目。

引用文档

将 VirtualMode 属性设置为
true 将 ListView 置于虚拟状态
模式。在虚拟模式下,正常
物品收集未使用。反而,
创建 ListViewItem 对象
根据 ListView 的需要动态地
他们。

虚拟模式在许多情况下都很有用
情况。如果是一个ListView对象
必须由一个非常大的
集合已经在内存中,创建
每个条目都有一个 ListViewItem 对象
可能很浪费。在虚拟模式下,仅
所需的项目已创建。在
其他情况下,的值
ListViewItem 对象可能需要
经常重新计算,并做
这对于整个集合来说
产生不可接受的性能。在
虚拟模式,仅需要的项目
计算出来的。

When it's in virtual mode you can't get the items out of the list view because the items aren't in the list view. That's the whole point of virtual mode.

Instead, you hold the items and the list view asks for the information it needs to display the items. If you are operating a list view successfully in virtual mode then you almost certainly already have the items in a list somewhere.

Quoting from the documentation:

Setting the VirtualMode property to
true puts the ListView into virtual
mode. In Virtual mode, the normal
Items collection is unused. Instead,
ListViewItem objects are created
dynamically as the ListView requires
them.

Virtual mode can be useful under many
circumstances. If a ListView object
must be populated from a very large
collection already in memory, creating
a ListViewItem object for each entry
can be wasteful. In virtual mode, only
the items required are created. In
other cases, the values of the
ListViewItem objects may need to be
recalculated frequently, and doing
this for the whole collection would
produce unacceptable performance. In
virtual mode, only the required items
are calculated.

╰◇生如夏花灿烂 2024-11-14 00:02:30

如果在列表处于虚拟模式时调用 ListViewItemCollection.GetEnumerator() 方法,则会引发异常。这意味着您无法通过任何 LINQ 方法(包括 OfType())访问它们。

但是,您可以对列表进行简单的迭代:

List<string> lst = new List<string>();
for (int i = 0; i < listView1.VirtualListSize; i++) {
   lst.Add(listView1.Items[i].Text);

但是(再次),如果列表是虚拟的,它可能有大量项目,因此这可能需要一段时间:)

The ListViewItemCollection.GetEnumerator() method throws an exception if it is called when the list is in virtual mode. This means it will be impossible for you to access them via any LINQ method, including OfType().

However, you can just do a simple iteration of the list:

List<string> lst = new List<string>();
for (int i = 0; i < listView1.VirtualListSize; i++) {
   lst.Add(listView1.Items[i].Text);

However (again), if the list is virtual, it probably has a large number of items, so this could take a while :)

海拔太高太耀眼 2024-11-14 00:02:30
for (int i=0;i< LSTView_Search.Items.Count;i++)
{
  LSTView_Search.Items[i];
}
for (int i=0;i< LSTView_Search.Items.Count;i++)
{
  LSTView_Search.Items[i];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文