Главная страница
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.051 c
8-1093947884
ExpertTech
2004-08-31 14:24
2004.11.28
Как в гриде границу ячейки нарисовать толще?


3-1099118308
GURU-RU@bk.ru
2004-10-30 10:38
2004.11.28
Автосохранение БД


1-1100392990
ZZS
2004-11-14 03:43
2004.11.28
Как правильно завершить программу?


3-1098267203
GanibalLector
2004-10-20 14:13
2004.11.28
решение проблемы обрыва коннекта в IBX


8-1094032671
X-Disa
2004-09-01 13:57
2004.11.28
Скроллбары в TImgView32