var
Form1: TForm1;
Edit: TEdit;
implementation
procedure TForm1.Btn_CreateComponentClick(Sender: TObject);
begin
Edit := TEdit.Create(Form1);
Edit.Parent := Form1;
Edit.Name := 'Edit';
end;
procedure TForm1.Btn_FreeComponentClick(Sender: TObject);
begin
{$IFDEF AUTOREFCOUNT}
Edit.Parent := nil;
{$ENDIF}
Edit.Free;
end;
procedure TForm1.Btn_FindComponentClick(Sender: TObject);
begin
if Assigned(FindComponent('Edit')) then
ShowMessage('Компонент найден')
else
ShowMessage('Компонент не найден');
end;
Последовательность действий:
1. Пытаемся найти компонент (Btn_FindComponentClick). Компонент не находится, все OK.
2. Создаем компонент (Btn_CreateComponentClick). Компонент создается, все OK.
3. Пытаемся найти компонент (Btn_FindComponentClick). Компонент находится, все OK.
4. Удаляем компонент (Btn_FreeComponentClick). Компонент якобы удаляется (исчезает с формы). НО…
5. Пытаемся найти компонент (Btn_FindComponentClick). Компонент находится, а это уже неOK. Повторное создание компонента естественно приведет к ошибке "A component named Edit already exists".
Собственно вопрос, как полностью удалить компонент, чтобы FindComponent его больше не видел?
Вопрос
estra
Вопрос в продолжение темы Как правильно удалять контролы в RunTime? Для начала код тестового приложения
var Form1: TForm1; Edit: TEdit; implementation procedure TForm1.Btn_CreateComponentClick(Sender: TObject); begin Edit := TEdit.Create(Form1); Edit.Parent := Form1; Edit.Name := 'Edit'; end; procedure TForm1.Btn_FreeComponentClick(Sender: TObject); begin {$IFDEF AUTOREFCOUNT} Edit.Parent := nil; {$ENDIF} Edit.Free; end; procedure TForm1.Btn_FindComponentClick(Sender: TObject); begin if Assigned(FindComponent('Edit')) then ShowMessage('Компонент найден') else ShowMessage('Компонент не найден'); end;
Последовательность действий:
1. Пытаемся найти компонент (Btn_FindComponentClick). Компонент не находится, все OK.
2. Создаем компонент (Btn_CreateComponentClick). Компонент создается, все OK.
3. Пытаемся найти компонент (Btn_FindComponentClick). Компонент находится, все OK.
4. Удаляем компонент (Btn_FreeComponentClick). Компонент якобы удаляется (исчезает с формы). НО…
5. Пытаемся найти компонент (Btn_FindComponentClick). Компонент находится, а это уже не OK. Повторное создание компонента естественно приведет к ошибке "A component named Edit already exists".
Собственно вопрос, как полностью удалить компонент, чтобы FindComponent его больше не видел?
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.