Главная страница
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.023 c
8-1093505993
Andrey
2004-08-26 11:39
2004.11.28
распознование формата картинки


14-1100242672
MBo
2004-11-12 09:57
2004.11.28
Пятница - новые похождения Васи Пупкина и другие задачки ;)


3-1098961483
BigError
2004-10-28 15:04
2004.11.28
Что-то никак не соображу как правильно сделать..


3-1099400743
Nexel
2004-11-02 16:05
2004.11.28
Delphi+Bde+Paradox=Index out of date


14-1100072413
ostap007
2004-11-10 10:40
2004.11.28
Рисование в Delphi