Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.035 c
14-1100037928
KilkennyCat
2004-11-10 01:05
2004.11.28
Завтра покупаю еще одну чугунную сковородку.


1-1100264944
Kasjan
2004-11-12 16:09
2004.11.28
Картинки в DBGridEh


14-1100275075
Томик
2004-11-12 18:57
2004.11.28
ищу друзей


6-1095672033
kot_phg
2004-09-20 13:20
2004.11.28
Как уменьшить время ожидание пакета в компоненте TcpClient?


1-1100545950
ser_vik
2004-11-15 22:12
2004.11.28
начинающий - функция CreateDirectory





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский