TListBox上的“列表索引越界”

时间:2010-09-28 00:47:27

标签: delphi exception listbox delphi-7 ownerdrawn

我在表单上有一个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 here

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

  

Project ###引发异常类EStringListError,消息'List index out of bounds(1)'

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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