Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Помогите сделать список обьектов некоторого класса   Найти похожие ветки 

 
m.alex   (2004-11-14 21:38) [0]

Мастера, подскажите пожалуйста как лучше сделать!

Ситуация такова:
Есть класс TSomeClass, в котором я описал свои методы, свойства и тд.

Хочу сделать список ListBox и в нем фиксировать созданные обьекты класса TSomeClass.

Я хочу привязать сам обьект к имени в списке.
Пишу:

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
   New_Some_Object : TSomeClass;
begin
New_Some_Object := TSomeClass.Create;
i:=Form1.ListBox1.Items.Count+1;
Form1.ListBox1.Items.AddObject("NewObject "+inttostr(i),New_Some_Object);
end;

и следом пишу обработку удаления выделенного обьекта:
procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
   Some_Object_to_Delete : TSomeClass;
begin
i := Form1.ListBox1.ItemIndex;
Some_Object_to_Delete := Form1.ListBox1.Items.Objects[i];
Some_Object_to_Delete.Free;
end;

На строке
Some_Object_to_Delete := Form1.ListBox1.Items.Objects[i];
у меня ругаеться компилятор что ошибка.

Мастера подскажите пожалуйста в чем ошибка и правильно ли я вообще все это делаю?


 
Shaman_Naydak   (2004-11-14 22:17) [1]

Some_Object_to_Delete := TSomeClass(Form1.ListBox1.Items.Objects[i]);


 
m.alex   (2004-11-15 09:54) [2]

а кто мне подскажет почему вызывая метод Free у несуществующего обьекта я вылетаю с ошибкой?


 
Fay ©   (2004-11-15 09:55) [3]

2 m.alex   (15.11.04 09:54) [2]
Действительно, очень странно...


 
m.alex   (2004-11-15 10:19) [4]


> Fay ©


а ты посмотри на пример [0] там я не написал строчку
Form1.ListBox1.Items.Delete(i);
и если попытаться удалить дважды, то второй раз я буду уже вызывать метод free у несуществующего обекта.
Как в учебниках написано что метод free проверяет на существование обьекта и если да, то его удаляет!

А почему у меня во второй раз нажав на кнопку я вылетаю с ошибкой?


 
Юрий Зотов ©   (2004-11-15 10:53) [5]

> m.alex   (15.11.04 10:19) [4]

> если попытаться удалить дважды, то второй раз я буду уже
> вызывать метод free у несуществующего обекта.

Совершенно верно.

> Как в учебниках написано что метод free проверяет на
> существование обьекта и если да, то его удаляет!

Метод Free проверяет существование объекта, просто сравнивая ссылку на него с nil. А уничтожение объекта не обнуляет (да и не может обнулить) внешние ссылки на него - поэтому в Objects остается не nil и проверка проходит.

> А почему у меня во второй раз нажав на кнопку я вылетаю с
> ошибкой?

Из-за битой ссылки. Она не nil, но указывает на неверный адрес.


 
m.alex   (2004-11-15 11:11) [6]

спасибо разобрался.



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
4-1097792009
AKA
2004-10-15 02:13
2004.11.28
Как сделать приложение активным ?!


9-1090961036
xdev
2004-07-28 00:43
2004.11.28
Как создать дугу между тремя точками в OpenGL


8-1094074341
zero-g
2004-09-02 01:32
2004.11.28
Строка состояния в видео проигрывателе


1-1100255352
П7
2004-11-12 13:29
2004.11.28
Помогите портировать с С++ на Delphi


1-1100261601
Jann
2004-11-12 15:13
2004.11.28
StatusBar