|
한줄한줄 지우는 것이 눈에 보여서 상당히 느리실 껍니다. 이럴때는, BeginUpdate(); EndUpdate(); 메소드를 사용하시면 됩니다.
아래 예제는 Button1는 Item 5000개 추가, Button2 는 Item을 모두 삭제하는 예제입니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int itCount;
ListView1->Items->BeginUpdate();
for(itCount = 0; itCount < 5000; itCount ++) {
TListItem *ITEM;
ITEM = ListView1->Items->Add();
ITEM->Caption = "HELLO";
}
ListView1->Items->EndUpdate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ListView1->Items->BeginUpdate();
ListView1->Items->Clear();
ListView1->Items->EndUpdate();
}
//---------------------------------------------------------------------------
유지상 님이 쓰신 글 :
: ListView1 라는 리스트뷰를 폼에 놓고,
: 그 리스트뷰에 매우 많은 양의 리스트가 삽입되었다고 할 때에,
: 이때 그 리스트를 한꺼번에 지우기 위해서,
: ListView1->Items->Clear()
: 라고 했는데, 동작이 너무 느립니다.
: 종종,ListView1에 들어있는 아이템개수가 (약 5000개 정도로)많을 경우 ListView1->Items->Clear() 가 수행되는 도중 시스템다운이 일어나기도 합니다. (사실은 이 리스트뷰는 동영상의 자막을 한줄한줄 읽어들여서 다 표시해주는 역할을 합니다. 일반적으로 자막하나에 약 5000 개의 켑션이 들어있지요. ) 이 리스트뷰에 아이템들을 다 지울 때, 시스템에 무리를 적게 주면서 지우려면 어떻게해야하죠?
:
:
:
|