Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
1-1100258492
Frozzen
2004-11-12 14:21
2004.11.28
Поскажите как очистить Canvas?


14-1100174179
Карелин Артем
2004-11-11 14:56
2004.11.28
Как по закону перевести клиента с одной программы на другую?


4-1097680188
Comp
2004-10-13 19:09
2004.11.28
DrawFocusRect на стандартной кнопке.


3-1098770945
Serg-SE
2004-10-26 10:09
2004.11.28
Проблема из-за отсутствие длинного целого в IB


8-1093949562
Anderson
2004-08-31 14:52
2004.11.28
Растягивание изображения




   Наверх