«Список индексов за пределами» на TListBox - PullRequest
1 голос
/ 28 сентября 2010

У меня есть 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

msg и grpявляются локальными строковыми и целочисленными переменными.

Проект ### поднял класс исключения EStringListError с сообщением «Список индексов за пределами (1)»

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Глупая ошибка: я использовал grp := -1 в качестве группы по умолчанию, которая AddObject или Objects[index] не должна нравиться.

0 голосов
/ 28 сентября 2010

Вы просто хотите сохранить целое число, поэтому вы должны изменить свой код на

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)]);

Также смотрите этот учебник о AddObject.

...