热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Assign()之后,TListItem.Checked将自身切换为True

如何解决《在Assign()之后,TListItem.Checked将自身切换为True》经验,为你挑选了1个好方法。

我遇到了TListItem的一些意外行为.检查以下测试代码:

  var
  Item: TListItem;

  //...

  ListView1.Checkboxes := True;
  with ListView1.Items.Add do
  begin
    Caption := 'old item';
    Checked := False;
  end;

  Item := TListItem.Create(ListView1.Items);
  Item.Caption := 'new item';
  Item.Checked := False;

  ListView1.Items[0].Assign(Item);

  Assert(ListView1.Items[0].Caption = 'new item');
  Assert(ListView1.Items[0].Checked = False); //WTF

断言失败发生,因为Checked属性以某种方式将自身切换为True.我没有在帮助文件中找到关于此行为的任何评论.

这是一个错误还是一个功能?

我正在使用Delphi 7进行所有更新.



1> Remy Lebeau..:

Delphi附带VCL源代码.看在ComCtrls.pas为实施TListItemTListView.

假如你在你的项目中选择启用"使用调试的DCU",然后通过加强TListItem与调试器的源代码,你会看到究竟发生了什么. Item.Checked := False失败,读取Item.Checked总是返回True,因为Item.Index是-1(因为你绕过TListItems.Add()).

TListItem.GetChecked()吸气剂的方法不处理的可能性ListView_GetCheckState()的宏(这对于一个包装LVM_GETITEMSTATE消息)失败由于被传递的无效项目索引.

手动创建TListItem对象不足以将项添加到基础Win32 ListView控件.如果创建TListItemTListItems.Add()or 之外的via方法TLisItem.Insert(),则必须调用TListItems.AddItem()以插入TListitem基础ListView控件.


推荐阅读
author-avatar
web+php
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有