![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите сделать список обьектов некоторого класса [D7, WinXP]
m.alex © (2004-11-14 21:38:00)Мастера, подскажите пожалуйста как лучше сделать!
Ситуация такова:
Есть класс 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];
у меня ругаеться компилятор что ошибка.
Мастера подскажите пожалуйста в чем ошибка и правильно ли я вообще все это делаю?
m.alex (2004-11-15 11:11:00) [1]спасибо разобрался.
Юрий Зотов (2004-11-15 10:53:00) [2]> m.alex (15.11.04 10:19) [4]
> если попытаться удалить дважды, то второй раз я буду уже
> вызывать метод free у несуществующего обекта.
Совершенно верно.
> Как в учебниках написано что метод free проверяет на
> существование обьекта и если да, то его удаляет!
Метод Free проверяет существование объекта, просто сравнивая ссылку на него с nil. А уничтожение объекта не обнуляет (да и не может обнулить) внешние ссылки на него - поэтому в Objects остается не nil и проверка проходит.
> А почему у меня во второй раз нажав на кнопку я вылетаю с
> ошибкой?
Из-за битой ссылки. Она не nil, но указывает на неверный адрес.
m.alex (2004-11-15 10:19:00) [3]
> Fay ©
а ты посмотри на пример [0] там я не написал строчку
Form1.ListBox1.Items.Delete(i);
и если попытаться удалить дважды, то второй раз я буду уже вызывать метод free у несуществующего обекта.
Как в учебниках написано что метод free проверяет на существование обьекта и если да, то его удаляет!
А почему у меня во второй раз нажав на кнопку я вылетаю с ошибкой?
Fay (2004-11-15 09:55:00) [4]2 m.alex (15.11.04 09:54) [2]
Действительно, очень странно...
m.alex (2004-11-15 09:54:00) [5]а кто мне подскажет почему вызывая метод Free у несуществующего обьекта я вылетаю с ошибкой?
Shaman_Naydak (2004-11-14 22:17:00) [6]Some_Object_to_Delete := TSomeClass(Form1.ListBox1.Items.Objects[i]);