首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新TListView的最快方法

更新TListView的最快方法
EN

Stack Overflow用户
提问于 2012-12-12 15:14:45
回答 2查看 2.1K关注 0票数 1

我有一个TListView,它使用通过网络收集的数据填充。收集所有数据需要大约50 To,将其添加到列表中需要大约5秒。我最初的猜测是,在每次添加或类似的东西之后,它都会重新绘制。我应该如何使TListView尽快更新?

列和项都是通过代码添加的。

我尝试在列表中的项目上使用BeginUpdate和EndUpdate,但这并没有多大区别。大约有2000条条目被添加到列表中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-12 19:51:13

如果没有看到实际的代码,就无法确定为什么更新速度那么慢。但是,如果速度对您来说是一个问题,特别是对于很多列表项,则应该将TListView置于虚拟模式(将其OwnerData属性设置为true),并将状态信息存储在其他地方,而不是存储在TListView本身中(对于非虚拟ListView来说,2000项是大量开销)。然后,只需在需要触发重新绘制时调用ListView的Invalidate()UpdateItems()方法,并在需要时使用OnData事件向TListView提供状态数据。例如:

代码语言:javascript
复制
struct MyStatusInfo
{
    String Status;
    ...
};

MyStatusInfo StatusItems[2000];

__fastcall TForm1::TForm1(TComponent *Owner)
    : TForm(Owner)
{
    ...
    ListView1->Items->Count = 2000;  // you don't use Add() with a virtual ListView
    ...
}

void __fastcalll TForm1::UpdateStatus(int Index, const String &Status, ...)
{
    MyStatusInfo &Info = StatusItems[Item->Index];
    Info.Status = Status;
    ...
    ListView1->UpdateItems(Index, Index);
}

void __fastcall TForm1::ListView1Data(TObject *Sender, TListItem *Item)
{
    MyStatusInfo &Info = StatusItems[Item->Index];
    Item->Caption = Info.Status;
    ...
}
票数 1
EN

Stack Overflow用户

发布于 2012-12-12 15:37:00

我不确定这是否有帮助,因为BeginUpdate没有,但值得一试:

1)尝试在启用时填充它= false,然后启用它

2)尝试构建一个TListItems并将其直接分配给TListView的Item属性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13842761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档