网站导航免费论文 原创论文 论文搜索 作业答案 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 交易代码 > Delphi精品代码 > 正文
Delphi中使用ListView和TreeView的Item中的Data可能...
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 10/11/06

Delphi中大家在使用 ListViewTreeView时,一般都会使用到ItemData属性来保存大家自己的内部数据,这个Data的声明如下:

property Data: Pointer;

大家可以看到它就是一个指针,使用上一般类似如下代码(以ListView为)

添加时

  PViewItemState = ^TViewItemState;
  TViewItemState = record
    ViewItemId: integer;
  end;

var
  nLoop: integer;
  li: TListItem;
  pp: PViewItemState;
begin
  for nLoop := 0 to 10 do
  begin
    li := ListView1.Items.Add;
    li.Caption := IntToStr(nLoop);
    new(pp);
    pp^.ViewItemId := nLoop;
    li.Data := pp;
  end;
end;

删除相应的项时多数采用

  ListView1.DeleteSelected; 

  ListView1.Clear;

就结束了操作。

但是这里存在非常大的危险,就是我们的自己分配的Data内容有没有释放,Delphi文档中也没有关于这个问题的说明,所以我做了一个测试,发现Delphi是不自动释放这些数据的,这些未释放的数据在一个包含较多修改的ListView或者TreeView中将非常危险,如果是长期运行的系统将更危险,Delphi文档中也没有提示这些数据需要释放。

其实这个问题容易被大家忽略,解决办法还是有的,而且也不难,这里就要使用到ListView或者TreeViewOnDeletion事件,Delphi中关于OnDeletion的说明如下:

Occurs when an item in the list view is about to be deleted.

Delphi syntax:

property OnDeletion: TLVDeletedEvent;

C++ syntax:

__property TLVDeletedEvent OnDeletion = {read=FOnDeletion, write=FOnDeletion};

Description

Write an OnDeletion event handler to respond when an item in the list is about to be deleted. The Item parameter is the TListItem object from the Items property that is about to be deleted.

也就是说当需要删除项目时会触发这个事件,在VCL Source 中也可以看到调用过程,其实解决方法就是在这个事件中加入一个语句就可以了,并且是不可以缺少的语句,代码如下:

procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
begin
  Dispose(Item.Data);
end;

这样就可以安全的释放掉Data的内存了。

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
湘ICP备09003080号