Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
ВнизПомогите сделать список обьектов некоторого класса Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c