【问题标题】:How would you only draw certain ListView Items while in Virtual Mode?在虚拟模式下如何只绘制某些 ListView 项?
【发布时间】:2009-06-12 17:53:35
【问题描述】:

C#:如何在虚拟模式下只绘制某些 ListView 项?

我正在尝试创建一个类似过滤器的功能以在 listview 中使用,这样如果用户从 0-5 中选择一个 imageindex,它将循环遍历 listview 项目,并且只使有问题的项目具有正确的图像索引将被显示,其他项目将被隐藏。我将如何继续创建这样的例程?

【问题讨论】:

    标签: c# .net winforms listview


    【解决方案1】:

    如果您已经在为网格使用虚拟模式,则您知道列表中显示的所有项目都是从列表的“RetrieveVirtualItem”事件中请求的。这意味着您应该已经有一个对象数组作为列表项的后层(前层)。为了应用您想要的过滤器,您只需为上述事件处理事件处理程序并使用保存过滤器的外部变量,只返回满足条件的项目。

    如果您需要更多详细信息,请告诉我,也许可以提供一些代码让我专门帮助您,

    【讨论】:

    • 这几乎正是我想要做和尝试的,但是当我尝试只从缓存的数组变量 ListViewItems[] 中检索特定项目时,我收到一个错误。我对如何处理它有点困惑,因为我认为如果该事件不返回一个对象,它会返回一个异常,那么我将如何使它忽略我不想显示的那些它不会为那些触发事件?
    • 你能详细说明它抛出了什么错误吗?我认为您有一点误解:不会为您在 chached 列表中的每个 ListViewItem 触发该事件。该事件由列表触发它必须显示的列表的每个位置。因此,每次触发事件时,您都需要提供数组中的下一个项目,如果没有其他项目可用,则不需要提供任何内容。
    • 那么我应该创建另一个 ListViewItem 数组还是只创建一个 int 数组来跟踪我只想从 RetrieveVirtualItem 事件中检索回 listview 的索引?
    • 那么在将开始过滤的按钮中,我最初应该做什么,以便仅针对我希望从 arrListViewItemCache[] 显示的项目触发 RetrieveVirtualItem?当我完成过滤视图时,我将如何重新绘制它们以便它们都再次显示在列表视图中?通过使用无效方法?
    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2012-03-18
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多