Q&A

  • Treeview 에서 imageindex의 값에 따라 노드가 보이게 하는것
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

;



이런 식으로 하니깐...뒤죽박죽 트리가 되더라구요...ㅠㅠ



고수님들의 통쾌한 답변 부탁 드립니다.

1  COMMENTS
  • Profile
    최용일 2001.09.04 04:58
    안녕하세요. 최용일입니다.



    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

    > ;

    >

    > 이런 식으로 하니깐...뒤죽박죽 트리가 되더라구요...ㅠㅠ

    >

    > 고수님들의 통쾌한 답변 부탁 드립니다.