判断TTreeNode.Level, TTreeNode.Parent,然后用Selected属性设置

解决方案 »

  1.   

    研究一下下面的代码,能解决你的很多问题
    procedure TDWForm.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
       MastData.DWTable.First;
       MastData.DWTable.MoveBy(Node.AbsoluteIndex-1);
    end;
    procedure TDWForm.TreeViewUpdate;
    var
      Parent_ID:array[1..5] of integer;
      Node_Index,idx:integer;
    begin
       Parent_ID[1]:=0;
       Parent_ID[2]:=0;
       Parent_ID[3]:=0;
       Parent_ID[4]:=0;
       Parent_ID[5]:=0;
       with MastData,DWForm Do
       begin
          if TreeView1.Items.Count>0 then
             TreeView1.Items.Clear;
          TreeView1.Items.AddChild(Nil,'单位目录');      DWTable.First;
          Node_Index:=1;
          while not DWTable.EOF do
          begin
             idx:=(Length(DWTableDw_ID.Value)) Div 3;
             Parent_ID[idx]:=Node_Index;
             if idx=1 then
                TreeView1.Items.AddChild(TreeView1.Items[0],DWTableDw_name.Value)
             else
                TreeView1.Items.AddChild(TreeView1.Items[Parent_ID[idx-1]],DWTableDw_name.Value);
             Node_Index:=Node_Index+1;
             DWTable.Next;
          end;
       end;
    end;
    procedure TDWForm.Button1Click(Sender: TObject);
    begin
       with MastData do
       begin
          if DWSetupLabel.Caption='新增' then
          begin
             if DWTable.Locate('Dw_ID',Edit1.Text,[]) then
                 ShowMessage(format('此编号已被%s使用!请复核',[DWTableDw_name.Value]))
             else
             begin
                DWTable.Append;
                DWTableDw_ID.Value:=Edit1.Text;
                DWTableDw_Name.Value:=Edit2.Text;
                DWTableDw_adders.Value:=Edit3.Text;
                DWTableDw_lxr.Value:=Edit4.Text;
                DWTableDw_TEL.Value:=Edit5.Text;
                DWTableDw_lxrBP.Value:=Edit6.Text;
                DWTable.Post;
             end;
          end
          else
          begin
             DWTable.Locate('Dw_ID',OldDWBH.Text,[]);
             if Edit1.Text=OldDWBH.Text then
             begin
                DWTable.Edit;
                DWTableDw_Name.Value:=Edit2.Text;
                DWTableDw_adders.Value:=Edit3.Text;
                DWTableDw_lxr.Value:=Edit4.Text;
                DWTableDw_TEL.Value:=Edit5.Text;
                DWTableDw_lxrBP.Value:=Edit6.Text;
                DWTable.Post;
             end
             else
             if DWTable.Locate('Dw_ID',Edit1.Text,[]) then
                 ShowMessage(format('此编号已被%s使用!请复核',[DWTableDw_name.Value]))
             else
             begin
                DWTable.edit;
                DWTableDw_ID.Value:=Edit1.Text;
                DWTableDw_Name.Value:=Edit2.Text;
                DWTableDw_adders.Value:=Edit3.Text;
                DWTableDw_lxr.Value:=Edit4.Text;
                DWTableDw_TEL.Value:=Edit5.Text;
                DWTableDw_lxrBP.Value:=Edit6.Text;
                DWTable.Post;
             end;
          end;
          DWTable.DisableControls;
          TreeViewUpdate;
          DWTable.EnableControls;
       end;
    end;