Форум: "Потрепаться";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
ВнизTstrings или TstringsList Найти похожие ветки
← →
Igor_thief (2004-02-06 16:51) [0]Вот блин слом. Короче создаю я свой клас, в котором описываю поле типа Tstrings. Далее я экземпляр этого класса сохраняю в виде объекта в листбоксе и освобождаю экземпляр. Потом, когда я обращаюсь к этому объекту выскакивает Access violation. В чем проблема? З.Ы.: я так понял, что теряется ссылка на строки Tstrings в памяти. Как обойти глюк?
← →
Игорь Шевченко (2004-02-06 16:55) [1]Код в студию, телепатов нету
← →
Внук (2004-02-06 16:57) [2]Думаю, это не "глюк", а обычное незнание
← →
Юрий Зотов (2004-02-06 16:57) [3]1. Описывать надо, как TStrings, а вот содавать - TStringList (иначе нарветесь на abstract error).
2. Создали. Ссылку запомнили в ListBox"е. А вот уничтожать-то зачем? Ведь после уничтожения запомненная ссылка оказывается уже неверной - отсюда и Access Violation.
Уничтожать надо, но не сразу, а только когда объект уже будет реально не нужен.
← →
Danilka (2004-02-06 16:59) [4]
> Далее я экземпляр этого класса сохраняю в виде объекта в
> листбоксе и освобождаю экземпляр
в лист-боксе сохраняется ссылка на экземпляр. а если ты его потом прибиваешь, то ссылка ведет в никуда.
← →
}|{yk (2004-02-06 17:04) [5]Невозможно создать объект класса Tstrings, т.к. это базовый абстрактный класс
← →
}|{yk (2004-02-06 17:04) [6]Невозможно создать объект класса Tstrings, т.к. это базовый абстрактный класс
← →
Igor_thief (2004-02-06 17:12) [7]Юрий Зотов © (06.02.04 16:57) [3]
Было дело и с абстрактной ошибкой
← →
Igor_thief (2004-02-06 17:20) [8]TTovarKind = class(TObject)
Name: string;
IconInd: integer;
FirmsList: TStringList;//или Tstrings
end;
...
AKind := TTovarKind.Create(Self);
begin
AKind.Name := s;
AKind.IconInd := 0;//default icon index
AKind.FirmsList.Add(s1);
lbTovars.Items.AddObject(s, AKind);
end;
AKind.Free;
Ну а потом ...
AKind.FirmsList.Assign(TTovarKind(lbTovars.Items.Objects[lbTovars.ItemIndex]).FirmsList)
и тут та компилятор начинает орать
Наверное лучше заменить tstringlist на динам. масив строк?
← →
MBo (2004-02-06 17:27) [9]где код конструктора TTovarKind.Create?
← →
}|{yk (2004-02-06 17:28) [10]AKind.Free лишнее
ты удаляешь объект, а потом к нему обращаешься
← →
MBo (2004-02-06 17:35) [11]сразу и не рассмотрел
AKind.Free;
ну а потом ...
AKind.FirmsList.Assign(TTovarKind(lbTovars.Items.Objects
Вау!!!!
А раньше тебе удавалось к уничтоженным объектам обращаться?
← →
Igor_thief (2004-02-06 18:05) [12]MBo © (06.02.04 17:35) [11]
Ой, народ, Я просто завтыкал и не отудова скопировал кусочек кода. После "Ну а потом ..." идет TTovarKind(lbTovars.Items.Objects[lbTovars.ItemIndex]).FirmsList такое обрачщение.
Сорри :о)
← →
}|{yk (2004-02-06 18:12) [13]Да говорят же не надо удалять объекты после их добавления в листбокс
Удаляй их, например на закрытие формы
Ведь AddObject добавляет ссылки на объекты, а не сами объекты.
Потому и аксез виолатион
← →
Igor_thief (2004-02-06 19:54) [14]}|{yk © (06.02.04 18:12) [13]
Понял! Ладно, как-то выкручусь! Мне не подъодит вариант без удаления. Я просто хочу делать все в цыкле. Но все равно спасибо!!!
← →
Palladin (2004-02-06 21:02) [15]Да? Позвольте узнать причину, почему же этот вариант не подходит?
← →
Igor_thief (2004-02-07 15:48) [16]Palladin © (06.02.04 21:02) [15]
Да вот и я сам решил узнать эту причину и был приятно удевлен. Причины уже просто нет. Вариант который мне подсказали подходит просто супер. Так что сорри за втык!:о) Но правда вылез один очень не прикольный баг. Короче обращаюсь я к свойству count и выжу ерунду, то есть полнейшее не соответсвие ситуации (вот как обращаюсь: TTovarKind(lbTovars.Items.Objects[lbTovars.ItemIndex]).FirmsList).
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c