我在表单上有一个TListBox,项是用
listbox1.ItemIndex := listbox1.Items.AddObject('msg', TObject(grp));grp是一个整数。列表框设置为lbOwnerDrawFixed。
在onDrawItem事件中,我将在标有的行中引发异常EStringListError:
msg := (control as Tlistbox).Items.Strings[index]; // this line works
grp := integer((control as Tlistbox).Items.Objects[index]); // exception heremsg和grp是本地字符串和整数变量。
Project ###引发异常类EStringListError,其消息“列表索引超出界限(1)”
发布于 2010-09-28 01:08:56
愚蠢的错误:我使用grp := -1作为默认组,AddObject或Objects[index]肯定不喜欢它。
发布于 2010-09-28 00:51:55
您只想存储一个整数,所以您应该将代码更改为
listbox1.ItemIndex := listbox1.Items.Add(IntToStr(grp));
[...]
grp := StrToInt((control as TListBox).Items[index]);这里不需要存储对象,这使得整个过程变得更加容易和可读性更强。
现在遇到的例外情况是,您不能使用索引检索对象,而是必须使用与它们关联的字符串(AddObject的第一个参数)。正确的方法应该是这样的:
msg := (control as Tlistbox).Items.Strings[index];
grp := integer((control as Tlistbox).Items.Objects[(control as Tlistbox).Items.IndexOf(msg)]);还可以看到这个tutorial about AddObject。
https://stackoverflow.com/questions/3808921
复制相似问题