TreeView에서 검색을 하려합니다.
트리를 구성해 놓은 다음에 Index로 찾아가려 하는데요..
그 Child를 선택할 수 있는 방법은 없나요?
제가 treeview를 첨 다뤄보는 것이라
어떻게 해야 할지 모르겠네요.
node도 펼쳤다 접었다 할수 있어야 하는데..
그것도 모르겠고..
아시는 분 좀 알려 주세요..
^^
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 );
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를 사용한건데 좀 정리가 안된건데요
재귀호출이나 스트림으로 모두바꾸면 될겁니다.
정확히 파악이 안되어서 답변과 예제입니다.
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를 사용한건데 좀 정리가 안된건데요
재귀호출이나 스트림으로 모두바꾸면 될겁니다.