delphi TreeComboBox 生成树菜单

procedure TForm11.cxbtn1Click(Sender: TObject);
var
  T: DWORD;
begin
  T := GetTickCount;
  MakeTree(kbmMemTable1, cbb1);
  lbl1.Caption := Format('MakeTree所用时间: %d ms', [GetTickCount - T]);
end;

procedure TForm11.FormCreate(Sender: TObject);
var
  i, id: Integer;
begin
  id := 0;
  with kbmMemTable1 do
  begin
    DisableControls;
    try
      Open; //打开
      for i := 0 to 5 do
      begin
        Inc(id);
        Append; //附加数据
        //赋值
        FieldByName('ID').AsString := inttostr(id);
        FieldByName('ParentID').AsString := inttostr(0);
        FieldByName('Name').AsString := 'YXM'+'是'+inttostr(id);
        Post; //确定
      end;
      Append; //附加数据
      //赋值
      FieldByName('ID').AsString := '101';
      FieldByName('ParentID').AsString := '1';
      FieldByName('Name').AsString := '这个是1的儿子!';
      Post;
      Append; //附加数据
      //赋值
      FieldByName('ID').AsString := '201';
      FieldByName('ParentID').AsString := '2';
      FieldByName('Name').AsString := '这个是2的儿子!';
      Post;
      Append; //附加数据
      //赋值
      FieldByName('ID').AsString := '301';
      FieldByName('ParentID').AsString := '3';
      FieldByName('Name').AsString := '这个是3的儿子!';
      Post;

      Append; //附加数据
      //赋值
      FieldByName('ID').AsString := '10101';
      FieldByName('ParentID').AsString := '101';
      FieldByName('Name').AsString := '101的儿子,1的孙子!';
      Post;

      UpdateIndexes; //更新索引
    finally
      EnableControls; //连接数据感知控件
    end;
  end;
end;

procedure TForm11.MakeTree(dataset: TDataSet; TreeComboBox: TAdvTreeComboBox); //生成树
var
  List: TStringList;
  Node: TTreeNode;
  Index: Integer;
begin
  TreeComboBox.Items.BeginUpdate;
  try
    TreeComboBox.Items.Clear;
    List := TStringList.Create;
    try
      List.Sorted := True;
      dataset.DisableControls;
      dataset.First;
      while not dataset.Eof do
      begin
        if dataset.FieldByName('ParentID').AsInteger = 0 then { ParentID=0,顶层节点 }
          Node := TreeComboBox.Items.AddChild(nil, dataset.FieldByName('Name').AsString)
        else
        begin
          Index := List.IndexOf(dataset.FieldByName('ParentID').AsString);
          Node := TreeComboBox.Items.AddChild(TTreeNode(List.Objects[Index]),
            dataset.FieldByName('Name').AsString);
        end;
        List.AddObject(dataset.FieldByName('ID').AsString, Node);
        dataset.Next;
      end;
    finally
      List.Free;
    end;
  finally
    dataset.EnableControls;
    TreeComboBox.Items.EndUpdate;
  end;
end;

end.

 

参考

http://www.cnblogs.com/yplong/archive/2012/02/21/2361011.html

转载于:https://www.cnblogs.com/yangxuming/p/6603965.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值