Q&A

  • TreeView에서 검색을 하려면..
TreeView에서 검색을 하려합니다.
트리를 구성해 놓은 다음에 Index로 찾아가려 하는데요..
그 Child를 선택할 수 있는 방법은 없나요?
제가 treeview를 첨 다뤄보는 것이라
어떻게 해야 할지 모르겠네요.
node도 펼쳤다 접었다 할수 있어야 하는데..
그것도 모르겠고..
아시는 분 좀 알려 주세요..
^^
1  COMMENTS
  • Profile
    홍성락 2002.09.05 00:20
    hsr/////////////////////////////////////////////////////////////
    정확히 파악이 안되어서 답변과 예제입니다.
    1.Index로 찾아가려
    TreeView1.Items.Item[index].Selected := True;

    2.node도 펼쳤다 접었다 할수
    procedure TForm1.Button2Click(Sender: TObject);
    begin
        if TreeView1.Selected <> nil then begin
           TreeView1.Selected.Expanded := not(TreeView1.Selected.Expanded);
           //또는 TreeView1.Selected.Expand(True)
        end;
    end;
    또는 속성중 AutoExpand을 True로하시면됩니다.
    hsr/////////////////////////////////////////////////////////////
    예제입니다.
    1.하위 아이템들(재귀함수)
    Procedure TForm1.SearchChildItems(CurNode: TTreeNode);
    var
        ChildNode : TTreeNode;
    Begin
        if not CurNode.HasChildren then Exit;
        ChildNode := CurNode.getFirstChild;
        while (ChildNode <> nil) do begin
             if ChildNode.HasChildren then
                SearchChildItems(ChildNode);
             ListBox1.Items.Add( ChildNode.Text );

             ChildNode := CurNode.GetNextChild(ChildNode);
        end;
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
        ListBox1.Clear;
        SearchChildItems(TreeView1.Selected);
    end;

    2.하위 아이템들(루프문)
    procedure TForm1.Button4Click(Sender: TObject);
    var
       DelNode, TempNode : TTreeNode;
       i, j : integer;
    begin
        DelNode := TreeView1.Selected;
        ListBox1.Clear;
        ListBox1.Items.Add( DelNode.Text );

        for i := 0 to TreeView1.Items.Count-1 do begin
            if DelNode.Level < TreeView1.Items.Item[i].Level then begin
               TempNode := TreeView1.Items.Item[i];
               for j := 1 to TreeView1.Items.Item[i].Level-DelNode.Level do begin
                   TempNode := TempNode.Parent;
               end;
               if DelNode = TempNode then begin
                  ListBox1.Items.Add( TreeView1.Items.Item[i].Text );
               end;
            end;
        end;
    end;

    3.이름으로 인덱스찾기(TStream)
    procedure TForm1.Button6Click(Sender: TObject);
    var
        Tree_Stream : TStream;
        TS : TStrings;
        index : integer;
    begin
        Tree_Stream := TstringStream.Create('');
        TreeView1.SaveToStream(Tree_Stream);
        Tree_Stream.Position := 0;
        TS := TStringList.Create;
        TS.LoadFromStream(Tree_Stream);
        TS.Text := StringReplace(TS.Text, #9, '', [rfReplaceAll]);
        Index := TS.IndexOf(Edit2.Text);
        if Index >= 0 then
         TreeView1.Items.Item[index].Selected := True;
        showmessage(intToStr(index));
        TS.Destroy;
        Tree_Stream.Destroy;
    end;

    참고로 드린 파일은 DB를 사용한건데 좀 정리가 안된건데요
    재귀호출이나 스트림으로 모두바꾸면 될겁니다.