treeview1.Selected.getFirstChild;
treeview1.Selected.getNextChild;

解决方案 »

  1.   

    Toptvnode:=treeview1.TopItem;
      tvnode:=Toptvnode.getFirstChild;
      //s:=tvnode.Text;
      for j:=1 to Toptvnode.Count do
      begin
        if tvnode.HasChildren then       //有子结点
        begin
          if tvnode.ImageIndex=1 then
          begin
            s1:=tvnode.Text;
            for k:=1 to tvnode.Count do
            begin
              sqlstr:='select * from ztb_xm where mc='''+s1+'''';
              profun.Yresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
              s:=trim(dmunit.Ztb_DM.AllADOQuery.fieldbyname('wjbh').AsString);
              sqlstr:='update ztb_pb set sc_yes=''是'' where wjbh='''+s+''' and pbxh='''+inttostr(k)+'''';
              profun.Nresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
            end;
          end
          else              //没选中
          begin
            tvnode1:=tvnode.getFirstChild;    //获得下一个子结点
            for k:=1 to tvnode.Count do
            begin
              s1:=tvnode1.Text;
              if tvnode1.ImageIndex=1 then
              begin
                s2:=copy(tvnode1.Text,7,1);
                sqlstr:='select * from ztb_xm where mc='''+tvnode.Text+'''';
                profun.Yresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
                s:=trim(dmunit.Ztb_DM.AllADOQuery.fieldbyname('wjbh').AsString);
                sqlstr:='update ztb_pb set sc_yes=''是'' where wjbh='''+s+''' and pbxh='''+s2+'''';
                profun.Nresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
              end
              else
              begin
                s2:=copy(tvnode1.Text,7,1);
                sqlstr:='select * from ztb_xm where mc='''+tvnode.Text+'''';
                profun.Yresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
                s:=trim(dmunit.Ztb_DM.AllADOQuery.fieldbyname('wjbh').AsString);
                sqlstr:='update ztb_pb set sc_yes=''否'' where wjbh='''+s+''' and pbxh='''+s2+'''';
                profun.Nresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
              end;
              tvnode1:=tvnode1.GetNext;
           end;
          end;
          end
          else         //没有子结点
          begin
            if tvnode.ImageIndex=1 then
            begin
              s:=tvnode.Text;
              sqlstr:='select * from ztb_xm where mc='''+s+'''';
              profun.Yresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
              s:=trim(dmunit.Ztb_DM.AllADOQuery.fieldbyname('wjbh').AsString);
              sqlstr:='update ztb_pb set sc_yes=''是'' where wjbh=+'''+s+''' and pbxh=''1''';
              profun.Nresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
            end
            else
            begin
              s:=tvnode.Text;
              sqlstr:='select * from ztb_xm where mc='''+s+'''';
              profun.Yresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
              s:=trim(dmunit.Ztb_DM.AllADOQuery.fieldbyname('wjbh').AsString);
              sqlstr:='update ztb_pb set sc_yes=''否'' where wjbh='''+s+''' and pbxh=''1''';
              profun.Nresult(sqlstr,dmunit.Ztb_DM.AllADOQuery);
            end;
         end;
        tvnode:=toptvnode.GetNextChild(tvnode);
       end;你自己改一下
    变换应该不大,是一个遍力的的程序
      

  2.   

    procedure TForm1.AccessNode(MyNode: TTreeNode);
    var i:integer;
    begin
        for i:=1 to MyNode.Count do
          begin
            ListBox1.Items.Add(MyNode.Text);
            AccessNode(MyNode.GetNext);
          end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      AccessNode( Treeview1.Selected);
    end;这是一个递归方法, 不过就是有点问题, 可以帮我改一下吗?
      

  3.   

    MyNode.Count 好像只是下一层的个数吧
      

  4.   

    是下一层的个数, 所以用递归再做下一层, 但上面的是有问题, 就是那个i应该是代表这一层第几个子结点。 但我就是做不到这一点,好像i是1时,就应该是第一个子结点, 是2时就是第二个子结点, 这个在Stringslist里就好做, 但在TreeView 应该怎样实现呢?
      

  5.   

    改成这样试试:
    procedure TForm1.AccessNode(MyNode: TTreeNode);
    var i:integer;
    sChildNode : TTreeNode;
    begin
        for i:=1 to MyNode.Count do
          begin
            if i = 1 then
            begin
              sChildNode := MyNode.getFirstChild;
            end else
            begin
              sChildNode := sChildNode.getNextSibling;
            end;
            ListBox1.Items.Add(sChildNode.Text);
            AccessNode(sChildNode);
          end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
            ListBox1.Items.Clear;
            AccessNode( Treeview1.Selected);
    end;
      

  6.   

    改成这样试试:
    procedure TForm1.AccessNode(MyNode: TTreeNode);
    var i:integer;
    sChildNode : TTreeNode;
    begin
        for i:=1 to MyNode.Count do
          begin
            if i = 1 then
            begin
              sChildNode := MyNode.getFirstChild;
            end else
            begin
              sChildNode := sChildNode.getNextSibling;
            end;
            ListBox1.Items.Add(sChildNode.Text);
            AccessNode(sChildNode);
          end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
            ListBox1.Items.Clear;
            AccessNode( Treeview1.Selected);
    end;
      

  7.   

    成功了, 这样就可以了
    procedure TForm1.AccessNode(MyNode: TTreeNode);
    var i:integer;
    begin
        for i:=0 to MyNode.Count-1 do
          begin
            ListBox1.Items.Add(MyNode.Item[i].Text);
            if MyNode.Item[i].getFirstChild<>nil then  AccessNode(MyNode.Item[i]);
          end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      AccessNode( Treeview1.Selected);
    end;