ListView添加Item,总是报错:list index out of bounds(2)

Jikycc 2013-02-05 10:01:10
在ListView中建几个Column

item := lstTest.items.add;
item.caption := str1;
item.subitems.add(str2);
item.subitems.add(str3);



执行到item.caption := str1;时报错:list index out of bounds(2)
我建了5个Column,不至于溢出呀
请高人指点
...全文
645 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsfzxjy 2013-02-17
  • 打赏
  • 举报
回复
恭喜哇。。。。
Jikycc 2013-02-17
  • 打赏
  • 举报
回复
引用 8 楼 HSFZXJY 的回复:
TThread.synchronize 同步函数
用Synchronize解决问题,原来VCL的可显示控件只能用主线程来控制。我在Execute里面另外初始化一个用来处理消息的线程类,再把ListView添加的过程函数放在Synchronize里面,问题就解决了。
Jikycc 2013-02-16
  • 打赏
  • 举报
回复

procedure TServer.IdServerExecute(AThread: TIdPeerThread);
var
  msg: String;
begin
  msg := AThread.Connection.ReadLn;
  if msg = '' then exit;

  ReadMsg(msg);
end;

procedure TServer.ReadMsg(msg: String);
var
  item: TListItem;
begin
  M_Lock.Enter; //M_Lock是全局变量TCriticalSection
  item := ListView1.Items.Add;
  item.Caption := '0';  //单步执行到这里报错
  item.subItems.Add('1');
  item.subItems.Add('2');
  item.subItems.Add('3');
  item.subItems.Add(msg);
  M_Lock.Leave;
end;
重新开个进程同样报错
Jikycc 2013-02-16
  • 打赏
  • 举报
回复
写错了,是重开个线程来执行ReadMsg,同样会报错呢。
明空皓月 2013-02-09
  • 打赏
  • 举报
回复
单纯看这几行代码没问题,你不把上下文代码贴出来,谁知道哪里的问题?
hsfzxjy 2013-02-08
  • 打赏
  • 举报
回复
商业保密?不用吧。。
wylton 2013-02-08
  • 打赏
  • 举报
回复
靠, 前后码才几十行,有什么不可贴的?? 你这样子还不如不问问题。 到了第7楼才出现IdServer。。。谁知道你怎么添加怎么删除? listview你不用线程操作本来就有错。
hsfzxjy 2013-02-08
  • 打赏
  • 举报
回复
引用 11 楼 Jikycc 的回复:
我也想啊,真贴不了,你懂的,改天我在家里重写一次
我不懂。。怎么了?
Jikycc 2013-02-08
  • 打赏
  • 举报
回复
我也想啊,真贴不了,你懂的,改天我在家里重写一次
hsfzxjy 2013-02-08
  • 打赏
  • 举报
回复
那就没事。。还有你贴一下代码会死啊!
Jikycc 2013-02-08
  • 打赏
  • 举报
回复
引用 8 楼 HSFZXJY 的回复:
TThread.synchronize 同步函数
这句写在哪儿呢?应该不是同步的问题吧,我跟踪过,确实只执行了一次,不存在资源共享问题呀
hsfzxjy 2013-02-08
  • 打赏
  • 举报
回复
TThread.synchronize 同步函数
Jikycc 2013-02-08
  • 打赏
  • 举报
回复
仔细看了一下,我这段代码是写在IdServer.Excute里面,测试的时候客户端只发送了一条信息就报错了,所以应该不存在同步的问题,而且我后来加了M_Lock.Enter和M_Lock.Leave保护ListView,还是报同样的错
Jikycc 2013-02-06
  • 打赏
  • 举报
回复
引用 1 楼 HSFZXJY 的回复:
我测试了,没有问题啊。。
我一直都用得好好的,突然就不行了. 我看了一下,我一共5个Column,添加的时候居然是从第4个Column开始写,所以会out of bounds(2) 可为什么item.caption会从第4个开始呢,怎么都查不出原因
hongss 2013-02-06
  • 打赏
  • 举报
回复
无代码无真相
stephenchern 2013-02-06
  • 打赏
  • 举报
回复
你认真检查下代码 应该是其他地方调用 导致错误。。
Jikycc 2013-02-06
  • 打赏
  • 举报
回复
引用 3 楼 HSFZXJY 的回复:
贴个图吧。。
没办法贴图呢,就是报这个错,抱错的同时能看到把第一个caption的值写到了第4个Column
hsfzxjy 2013-02-06
  • 打赏
  • 举报
回复
贴个图吧。。
hsfzxjy 2013-02-05
  • 打赏
  • 举报
回复
我测试了,没有问题啊。。

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧