안녕하세요!
TreeView상에서 1 level의 여러 노드중 하나의 노드가 확장 될때
해당 노드의 2 level에 하위 노드가 추가됩니다.
이때 2 level의 항목들이 3 level를 가지고 있으면 2 level 항목에 '+' 표시를
미리 보여주고 2 level의 첫번째 항목이 선택되어지게 하려고 합니다.
아래와 같이 코딩을 하였더니
---------------------------------------------------------------------
Project *.exe raised exception class ETreeViewError with message
'List index out of bounds(%d)'.
Process stopped.Use Step or Run to continue.
---------------------------------------------------------------------
이와 같은 오류 메세지가 발생하였습니다.
- TreeView1.Items[0].Item[i].Selected := True;
이와 같이 하였더니 동일 level의 모든 항목이 체크되는 것 같습니다.
동일 level의 여러노드중 선택되어진 노드에만 적용하고 싶은데
어찌 해야 좋을지 아시는 분은 답변 부탁드립니다.
문영미 올림.
procedure Tfrm_tree.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
i : integer;
begin
TreeView1.Selected.DeleteChildren;
case TreeView1.Selected.Level of
0 :
begin
Level1_Create; // 하위 노드 추가
for i := 0 to TreeView1.Selected.Count - 1 do
TreeView1.Items[0].Item[i].Selected := True;
TreeView1.Items[0].Item[0].Focused := True;
end;
1 :
begin
Level2_Create; // 하위 노드 추가
for i := 0 to TreeView1.Selected.Count - 1 do
TreeView1.Items[1].Item[i].Selected := True;
TreeView1.Items[1].Item[0].Focused := True;
end;
2 :
begin
Level3_Create; // 하위 노드 추가
for i := 0 to TreeView1.Selected.Count - 1 do
TreeView1.Items[2].Item[i].Selected := True;
TreeView1.Items[2].Item[0].Focused := True;
end;
3 :
begin
Level4_Create; // 하위 노드 추가
for i := 0 to TreeView1.Selected.Count - 1 do
TreeView1.Items[3].Item[i].Selected := True;
TreeView1.Items[3].Item[0].Focused := True;
end;
else
begin
Level5_Create; // 하위 노드 추가
for i := 0 to TreeView1.Selected.Count - 1 do
TreeView1.Items[4].Item[i].Selected := True;
TreeView1.Items[4].Item[0].Focused := True;
end;
end;
end;
보여 주는 거지요.. 하지만 최적화 되어있지 않은 코드이므로
적당히 쓰세요..
그럼..
TNodeData = Class
CD : Integer;
end;
procedure TForm.TreeViewExpanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
var
SubNodeCount : Integer;
ChildNode : TTreeNode;
begin
ChildNode := Node.GetFirstChild;
for SubNodeCount := 1 to Node.Count do
begin
With qryHighCode do
begin
Close;
ParamByName('상위코드').AsInteger := TNodeData(ChildNode.Data).CD;
Open;
if RecordCount < 1 then exit;
SetChildNode(ChildNode, FieldByName('상위코드').AsInteger);
end;
ChildNode := Node.GetNextChild(ChildNode);
end;
end;
procedure TForm.SetChildNode(Node : TTreeNode; HighCode : Integer);
var
SubNodeCount, recCount : Integer;
begin
qryHighCode.Close;
qryHighCode.ParamByName('상위코드').AsInteger := HighCode;
qryHighCode.Open;
recCount := qryHighCode.RecordCount;
if recCount > 0 then
begin
qryHighCode.First;
for SubNodeCount := 1 to recCount do
begin
TreeNode := TreeView.Items.AddChild(Node, qryHighCode.FieldByName('이름').AsString);
TreeNode.Data := TNodeData.Create;
TNodeData(TreeNode.Data).CD := qryHighCode.FieldByName('분류코드').AsInteger;
qryHighCode.Next;
end;
end;
end;