imageindex 가 1과 2가 있습니다.
-root
--N1
---imageindex 1 인 node A
---imageindex 2 인 node B
---imageindex 2 인 node C
--N2
---imageindex 1 인 node D
---imageindex 2 인 node E
여기서 imageindex 가 2인 노드만 보이게 하고 싶습니다.
-root
--N1
---imageindex 2 node B
---imageindex 2 node C
--N2
---imageindex 2 node E
이런 식으로요......
for i=0 to TreeView.itmes.count-1
do
begin
if TreeView.items[i].imageindex=1
then
begin
TreeView.itmes[i].delete;
end
;
end
;
이런 식으로 하니깐...뒤죽박죽 트리가 되더라구요...ㅠㅠ
고수님들의 통쾌한 답변 부탁 드립니다.
TTreeView의 Items 배열을 이용하실거면 downto를 사용해서끝에서부터 검색해서 지우세요.
Delete메소드를 사용할때 지워진 뒷부분의 아이템들을 지워진 자리로 이동을 시키기 때문에
메모리 참조에러가 발생하게 됩니다.
var
I: Integer;
begin
TreeView1.Items.BeginUpdate;
for I:= TreeView1.Itmes.Count-1 downto 0 do
begin
if TreeView.Items[I].ImageIndex <> 2 then
TreeView.Itmes[I].Delete;
end;
TreeView1.Items.EndUpdate;
end;
Items배열을 이용하시는 거보다는 아래 코드가 훨씬 더 빠름니다...
var
CurNode, DelNode: TTreeNode;
begin
TreeView1.Items.BeginUpdate;
CurNode := TreeView1.Items.GetFirstNode;
repeat
DelNode := CurNode;
CurNode := CurNode.GetNext;
if DelNode.ImageIndex <> 2 then
TreeView1.Items.Delete(DelNode);
until CurNode = nil;
TreeView1.Items.EndUpdate;
end;
어눌한 걸 wrote:
> imageindex 가 1과 2가 있습니다.
>
> -root
> --N1
> ---imageindex 1 인 node A
> ---imageindex 2 인 node B
> ---imageindex 2 인 node C
> --N2
> ---imageindex 1 인 node D
> ---imageindex 2 인 node E
>
> 여기서 imageindex 가 2인 노드만 보이게 하고 싶습니다.
>
> -root
> --N1
> ---imageindex 2 node B
> ---imageindex 2 node C
> --N2
> ---imageindex 2 node E
>
> 이런 식으로요......
>
> for i=0 to TreeView.itmes.count-1
> do
> begin
> if TreeView.items[i].imageindex=1
> then
> begin
> TreeView.itmes[i].delete;
> end
> ;
> end
> ;
>
> 이런 식으로 하니깐...뒤죽박죽 트리가 되더라구요...ㅠㅠ
>
> 고수님들의 통쾌한 답변 부탁 드립니다.