Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];

Вниз

динамически создаваемые объекты как их удалить?   Найти похожие ветки 

 
Aleks   (2009-12-11 01:08) [0]

Доброго времени суток, Мастера подскажите, как удалить созданные мной объекты(панели в данном случае), перед новым их созданием.
Дело в том, что эти панели у меня создаются динамически, загружается список, в зависимости от того куда нажал пользователь, и по списку создаются панели, списки всегда разные, создаётся от 0 до 50 панелей.
Проблема:
              Eсли было 20 панелей, а потом грузится список где всего 10, то нижние 10 остаются от старого списка.
Вот код который я использую:

procedure TForm1.clik1(Sender: TObject);
var
Panel:TPanel;
i,x,y,a:Integer;
begin
Memo1.Lines.LoadFromFile("c:\Text.txt");
x:=0;
y:=25;
a:=25;
For i:=0 to StrToInt(Edit2.text) do
Begin
If y>=(TabControl1.Height-(Panel.Height+a)) Then
  BEGIN
   y:=25;
   Inc(x,400);
  End;
Panel:= TPanel.Create(self);
Panel.Parent := TabControl1;
Panel.Left :=x;
Panel.Top :=y; Panel.Caption:=Copy(Memo1.Lines.Strings[i],0,(Pos(":",Memo1.Lines.Strings[i])1)) ;
Panel.Width :=150;
Panel.Height:=20;
Panel.OnClick:=Form1.clik;
Panel.BevelInner:=bvLowered;
Panel.Alignment:=taLeftJustify;
Inc(y,20);
End;
end;


 
Плохиш ©   (2009-12-11 01:33) [1]


> динамически создаваемые объекты как их удалить?

Методом Free.


 
KilkennyCat ©   (2009-12-11 02:17) [2]

предварительно проверив.


 
Германн ©   (2009-12-11 02:32) [3]

А чтобы предварительная проверка работала правильно удалять надо методом FreeAndNil.

Автор. А задачу свою ты сказать обычными словами можешь?


 
Aleks   (2009-12-11 02:54) [4]

Попробую :)
Создаётся несколько панелей
For i:=0 to StrToInt(Edit2.text) do   //   Edit.Text=12 например
Begin
b:=TPanel.Create(Panel1);
.....
End;

ВОПРОС Как удалить все 12 панелей.
Пробовал

b.Free;

Удаляется только последняя из созданных панелей


 
Германн ©   (2009-12-11 03:04) [5]


> Aleks   (11.12.09 02:54) [4]
>
> Попробую :)

Хреново пробуешь. Читай учебник.


 
Aleks   (2009-12-11 03:58) [6]

Удалено модератором


 
KilkennyCat ©   (2009-12-11 04:05) [7]


> Удаляется только последняя из созданных панелей

разумеется. b ибо адресуешься к последней. или ты надеешься, что одна переменная помнит все присваивания себе за свою жизнь? только последнее.
Из чего получаем два варианта:
1) создаем массив и играемся с ним (то есть заменяем переменную b массивом).
соответсвенно, как в цикле создавали, так в цикле и убиваем.
2) зная систему имен (panel1, panel2..panelX) иш\щем и убиваем по именам (изучаем TFindComponent)


 
sniknik ©   (2009-12-11 08:09) [8]

3) создавая присваиваем свой идентификактор каждому в tag, после сравниваем и "убиваем" если совпал.
4) зная что имя вообще то не обязательный параметр, не присваиваем его созданным панелям и в дальнейшем ориентируемся по пустому имени.
5) зная, что например все созданные нами это панели, и "лежат" они на чемто, и что больше именно панелей на нем нет, удаляем по типу, а ищем их на паренте (чёмто. или сравниваем с ним.)
6) удаляем парента, со всем что на нем, "невзирая на лица".
7) ...

вариантов в общем дофига, использовать лучше конечно то, что лучше подходит к конкретной задаче (что будет проще, а то начнешь городить систему идентификаторов/массивов, а это и не нужно совсем). жаль только автор вместо того чтобы нормально осветить задачу начал "умничать" в ответ...


 
Kyn66 ©   (2009-12-11 09:03) [9]

Удаляй через FindComponent или как вариант уничтожить общего родителя.


 
icWasya ©   (2009-12-11 11:01) [10]

можно ещё так

на форме создаём приватное поле

type TForm1=class(TForm)
....
private
 PanelOwner : TComponent;
...
end;


затем в процедуре создания вместо
Panel:= TPanel.Create(self);
делаем
if not Assigned(PanelOwner) PanelOwner :=TComponent.Create(Self);

Panel:= TPanel.Create(PanelOwner);


и уничтожаем одним движением
FreeAndNil(PanelOwner);


 
Aleks   (2009-12-11 12:29) [11]

Спасибо всем, за варианты решений.
Уничтожить общего родителя. Намного проще и быстрее.
Всё пролучилось.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
2-1260698706
Игорь
2009-12-13 13:05
2010.02.07
Определить имеет ли пользователь привилегии администратора


15-1259746350
Хитрий Лис
2009-12-02 12:32
2010.02.07
Какие у кого мысли о книжке Американское сало ?


8-1202728924
Vayrus
2008-02-11 14:22
2010.02.07
SWF2Exe


2-1260482915
Aleks
2009-12-11 01:08
2010.02.07
динамически создаваемые объекты как их удалить?


2-1260449124
Caster Troi
2009-12-10 15:45
2010.02.07
Парсинг файлов. TStream.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский