TreeView的内容动态更新(100分)

  • 主题发起人 主题发起人 ycxy
  • 开始时间 开始时间
Y

ycxy

Unregistered / Unconfirmed
GUEST, unregistred user!
TreeView的内容在运行时更新
先treeview.items.clear
然后添加
但clear的速度极慢,几百条需要近
1分钟,如何改善性能
(我的Treeview一级节点一般200个左右,
二级节点一般几十个)
 
用下面的代码试一下:

TreeView.Items.BeginUpdate;
TreeView.Items.Clear;
TreeView.Items.EndUpdate;
 
新建立一个items:Ttreenodes类
在此类种加入你要的东西,
替换treeview的items,
free,原treeview的items.

//
var
newItems:TTreeNodes;
oldItems:TTreeNodes;
begin
//update new items
newItems:=TTreeNodes.Create;
newItems.add('affdsf');
//end update
oldItems:=TreeView.items;
// update tree view
TreeView.Items.BeginUpdate;
TreeView.Items:=newItems;
TreeView.Items.EndUpdate;
//
oldItems.free;
 
应该用ZRY的方法,
问题的关键在于Clear方法会一个一个地删除每个Node,
于是TreeView不断刷新,所以速度就....

代码修正一下:
with MyTreeView.Items do
<B>try</B>
BeginUpdate;
Clear;
<B>finally</B>
EndUpdate;
<B>end;</B>

另外
1、你现在遇到的问题是大量删除,
如果是大量插入,也应该同样处理
2、ListView有同样问题,注意
其他Windows控件也有,但不很明显
比如Memo、RichEdit等等
总之,凡大量数据修改的情况下,
应该注意BeginUpdate和EndUpdate
3、<B>BeginUpdate和EndUpdate应该一一对应</B>,
因为Delphi实际上是用<B>计数器</B>来处理的,
如果忘了EndUpdate,
或者BeginUpdate比EndUpdate次数多,
可能导致控件不刷新了~~
 
用beginupdate和endupdate好使,我试了一下,的确有效果,呵呵不过我的可能比较少

但是直接替换也可以,就是两个之间互相切换嘛,有的软件就是这么做的呀
 
关键是BeginUpdate和EndUpdate的使用,。
 
主要就是界面的刷新,以上说的我想都是正确的
 
BeginUpdate和EndUpdate搭配使用
没有明显的效果,请问有没有更好的
办法
 
我看还是把原有要删除的TREEVIEW FREE掉,然后再CREATE 一个,这样速度应该要明显快一点。
 
多人接受答案了。
 
后退
顶部