现有一个treeview,一个button,当button按下treeview展开一级,treeview全部展开后,button的caption改为收缩,按下后收缩一级,直到全部收缩,button的caption改为展开有代码最好

解决方案 »

  1.   

    代码写起来太多,给你一点思路自己实现吧
    TreeView1.Selected.Expand(False);//选中节点单级展开
    TreeView1.Selected.Collapse(True);//选中节点全部收缩
    TreeView1.Selected.HasChildren;//是否有子节点
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        TreeView1: TTreeView;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      bdirect:boolean=true;//true表示展开,false表示合拢
      iSign:integer=0;//进行到第几级了
      iHint:integer;//treeview的深度
    implementation{$R *.dfm}
    (* 刚看了你的揭贴率很高才写的,呵呵
    前提条件:treeview排布  跟结点
        --1
          --11
          --12
        --2
          --21
          --22
        --3
          --31
          --32
    *)
    function SeachTvDepth(index:ttreeview):Integer;
    var item:ttreenode;
        i:Integer;
        temp:integer;
    begin
      result:=0;
      for i:=0 to index.Items.Count-1 do
      begin
        item:=index.Items.Item[i];
        temp:=0;
        if item.HasChildren then continue;
        while item<>nil do
        begin
          item:=item.Parent ;
          inc(temp);
        end;
        if temp>result then result:=temp;
      end;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Button1.Caption:='展开';
      TreeView1.FullCollapse ;
      iHint:=SeachTvDepth(TreeView1);
      if iHint<1 then application.Terminate ;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var i:Integer;
        iTemp:integer;
        Item,Item1:ttreenode;
    begin
      if bdirect then//展开
      begin
        inc(iSign);
        if iSign=iHint then
        begin
          Button1.Caption:='收缩';
          bdirect:=not bdirect;
          //exit;
        end;
        for i:=0 to TreeView1.Items.Count-1 do
        begin
          Item:=TreeView1.Items.item[i];
          Item1:=Item;
          //-----------------------------------------
          iTemp:=0;
          while Item1<>nil do
          begin
            Item1:=Item1.Parent ;
            inc(iTemp);
          end;
          if iTemp=iSign then  Item.Expand(false);
        end;
      end
      else
      begin
        dec(iSign);
        if iSign=0 then
        begin
          Button1.Caption:='展开';
          bdirect:=not bdirect;
          exit;
        end;
        for i:=0 to TreeView1.Items.Count-1 do
        begin
          Item:=TreeView1.Items.item[i];
          Item1:=Item;
          //-----------------------------------------
          iTemp:=0;
          while Item1<>nil do
          begin
            Item1:=Item1.Parent ;
            inc(iTemp);
          end;
          if (iTemp=iSign)then Item.Collapse(false);
        end;
      end;
    end;end.