首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TListBox上的“超出界限的列表索引”

TListBox上的“超出界限的列表索引”
EN

Stack Overflow用户
提问于 2010-09-28 00:47:27
回答 2查看 7.4K关注 0票数 1

我在表单上有一个TListBox,项是用

代码语言:javascript
复制
listbox1.ItemIndex := listbox1.Items.AddObject('msg', TObject(grp));

grp是一个整数。列表框设置为lbOwnerDrawFixed

onDrawItem事件中,我将在标有的行中引发异常EStringListError

代码语言:javascript
复制
msg := (control as Tlistbox).Items.Strings[index];           // this line works
grp := integer((control as Tlistbox).Items.Objects[index]);  // exception here

msggrp是本地字符串和整数变量。

Project ###引发异常类EStringListError,其消息“列表索引超出界限(1)”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-28 01:08:56

愚蠢的错误:我使用grp := -1作为默认组,AddObjectObjects[index]肯定不喜欢它。

票数 1
EN

Stack Overflow用户

发布于 2010-09-28 00:51:55

您只想存储一个整数,所以您应该将代码更改为

代码语言:javascript
复制
listbox1.ItemIndex := listbox1.Items.Add(IntToStr(grp));
[...]
grp := StrToInt((control as TListBox).Items[index]);

这里不需要存储对象,这使得整个过程变得更加容易和可读性更强。

现在遇到的例外情况是,您不能使用索引检索对象,而是必须使用与它们关联的字符串(AddObject的第一个参数)。正确的方法应该是这样的:

代码语言:javascript
复制
msg := (control as Tlistbox).Items.Strings[index];
grp := integer((control as Tlistbox).Items.Objects[(control as Tlistbox).Items.IndexOf(msg)]);

还可以看到这个tutorial about AddObject

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3808921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档