起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 320|回复: 8

【结贴】请问TCheckBizTreeView用法

[复制链接]
发表于 2010-7-22 11:13:09 | 显示全部楼层 |阅读模式
代码如下:
begin
  lNode := ATreeView.Items.GetFirstNode;
  ATreeView.Items.BeginUpdate;
  lQuery := TQuery.Create(nil);
  try
    lQuery.ConnectionString := TLIB_PDM.GetXTSCGLDBConnectionString;

      lQuery.Close;  //必须加这句
      lQuery.CommandText := SQL;
      lQuery.Open;
      lQuery.First;
      while not lQuery.Eof do
      begin
        lCurrNode := ATreeView.Items.AddChild(lNode, lQuery.FieldByName('Name').AsString);

        lDir := TDir.Create;
        AObjectList.Add(lDir);
        lDir.ID := lQuery.FieldByName('ID').AsString;
        //lDir.TemplateID := lQuery.FieldByName('TemplateID').AsString;
        lCurrNode.Data := lDir;
        lQuery.Next;
      end;

  finally
    lQuery.Free;
    ATreeView.Items.EndUpdate;
  end;
end;
第二次运行lCurrNode.Data := lDir;时报错:
Assertion failure (E:\DEVELOP\Build_MostNew\TIB3\Src\TIB\Core\Sys\BizComCtrls.pas, line 541)
回复

使用道具 举报

发表于 2010-7-22 12:08:09 | 显示全部楼层
对象用完为啥不释放呢?lQuery释放了,lDir ?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-7-22 13:37:18 | 显示全部楼层
和那个没关系,lDir 窗体释放时候会释放的,你试试
回复 支持 反对

使用道具 举报

发表于 2010-7-22 14:29:56 | 显示全部楼层
TDir是 什么对象?
另外 这段代码中
   while not lQuery.Eof do
      begin
        lCurrNode := ATreeView.Items.AddChild(lNode, lQuery.FieldByName('Name').AsString);

        lDir := TDir.Create;//这句代码是否把它放到循环外?为什么要在循环内重复创建此对象?
        AObjectList.Add(lDir);
        lDir.ID := lQuery.FieldByName('ID').AsString;
        //lDir.TemplateID := lQuery.FieldByName('TemplateID').AsString;
        lCurrNode.Data := lDir;
        lQuery.Next;
      end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-7-22 16:26:11 | 显示全部楼层
TDir = class(TObject)
  private
    FID: string;
    FTemplateID: string;
    FImageIndex: Integer;
  public
    property ID: string read FID write FID;
    property TemplateID: string read FTemplateID write FTemplateID;
    property ImageIndex: Integer read FImageIndex write FImageIndex;
  end;

这段是根据数据库纪录,创建多个对象挂到树的节点上,这些对象最后用完会由AObjectList统一释放掉的
同样的代码TTreeView没问题的,现在是想用TCheckBizTreeView的可以checkbox那个效果
回复 支持 反对

使用道具 举报

发表于 2010-7-22 16:46:26 | 显示全部楼层
哦,那如果仅仅是为了 实现checkbox的效果,你用TTreeView也是可以的。其实就是 利用它的Image属性(即checkbox的效果就是利用它的图标来实现的)
网上找了个参考,请楼主研究下
http://www.builder.com.cn/2007/1031/593883.shtml
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-7-22 17:33:49 | 显示全部楼层
请问能直接用TCheckBizTreeView吗,我那样写不可以吗,因为那个例子也没考虑灰色的情况
回复 支持 反对

使用道具 举报

发表于 2010-7-23 09:12:29 | 显示全部楼层
不建议 用TCheckBizTreeView 它来加载非平台的对象,如果想要用它,应该会比较麻烦,因为你要把它所有的树的加载机制都要重写一遍。(1楼报错的问题就是加载失败了)
其实TCheckBizTreeView 本身 也是利用 6楼说的方式来实现的,你试试 用这个组件:TCheckTreeView (在工具箱的 Extend Form 中)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-7-23 09:22:52 | 显示全部楼层
ok了:如果用TCheckBizTreeView,用AddObject方法可以,用AddChild报断言错误,这个应该是bug
按照8楼建议,用TCheckTreeView,目前挺好还没有发现问题,先结贴吧,谢谢zfang。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 16:32 , Processed in 0.039839 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表