Q&A

  • 트리뷰에서 '+' 미리 보여주기
안녕하세요!



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;

1  COMMENTS
  • Profile
    최연식 1999.11.29 21:28
    예전에 작성한 코드인데, 디비에서 값을 읽어와

    보여 주는 거지요.. 하지만 최적화 되어있지 않은 코드이므로

    적당히 쓰세요..

    그럼..



    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;