![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление компонентов в Run-Time [D7, WinXP]
NewGuest © (2010-02-18 15:18:00)Столкнулся с проблемой: динамически создаю компоненты на панели, по клику на кнопке предположим панель нужно очищать (удалять кнопки), однако иногда при очищении вылетает "Abstract Error" (при выходе из процедуры обрабатывающей клик на кнопке).
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure BClick(Sender: TObject);
procedure CreateButton(tg,k: integer);
end;
var
Form1: TForm1;
btn_mas: array [1..25] of string;
implementation
{$R *.dfm}
procedure TForm1.CreateButton(tg,k: integer);
var
t: TButton;
begin
t:=Tbutton.Create(Self);
t.Left:=k;
t.Top:=8;
t.Caption:=btn_mas[tg];
t.Visible:=true;
t.Parent:=Panel1;
t.OnClick:=BClick;
t.Tag:=tg;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
t: TButton;
i,k: integer;
begin
k:=16;
for i:=1 to high(btn_mas) do
btn_mas[i]:='index-'+IntToStr(i);
for i:=1 to 2{high(btn_mas)} do
begin
CreateButton(i,k);
k:=k+75+6;
end;
end;
procedure TForm1.BClick(Sender: TObject);
begin
while Panel1.ControlCount>0 do
begin
if Panel1.Controls[0] is TButton
then Panel1.Controls[0].Free;
end;
end;
end.
Т.е иногда ошибка вылетает (например при наатии на первую), а ингода нет.
Подскажите, в чем ошибка?
Ega23 (2010-02-18 22:34:00) [1]
while Panel1.ControlCount>0 do
begin
if Panel1.Controls[0] is TButton
then Panel1.Controls[0].Free;
end;
Не надо так делать. Удаляй с конца:
for i := List.Count - 1 downto 0 do
List[i].Free;
Почему нельзя? А ты создай список на 100.000 кнопок. И удали его и так и так, с выключенной оптимизацией.
А потом посмотри в VCL, как ведёт себя TList.Delete(Index)
NewGuest (2010-02-18 17:45:00) [2]Спасибо, помолго!
Игорь Шевченко (2010-02-18 17:07:00) [3]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1266238962&n=0
DimaBr (2010-02-18 16:52:00) [4]Нельзя удалять компонент из его же события
DimaBr (2010-02-18 16:50:00) [5]Внимание!Здесьобсуждаются вопросы, связанные с разработкойкомпонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поискуи использованиюготовых компонентов, редакторов или экспертов являются нарушениемтематики и могут быть удалены.