Форум: "Компоненты";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизПрерывание работы конструктора Найти похожие ветки
← →
FunkyByte © (2006-02-28 07:42) [0]Доброго времени суток, уважаемые мастера. Недавно столкнулся со следующей проблемой. В потомке TForm перекрыл конструктор следующим образом:
constructor TMyClass.Create(AOwner: TComponent; AName: String);
begin
inherited Create(AOwner);
try
Name:=AName;
except
on EComponentError do
begin
ShowMessage("Неверное имя!");
Free;
end;
end;
FMyField:=20;
...
end;
Проблема в том, что после обработки исключения EConvertError выполнение конструктора продолжается. Причём полю FMyField объекта, уничтоженного до этого методом Free, успешно присваивается новое значение. Единственное объяснение этого странного явления, которое мне приходит на ум, это что объект не уничтожился. Кроме того, пытался прервать выполнение конструктора при помощи процедуры Exit - получил Access violation. Отсюда возникает 3 вопроса:
1) почему объект не уничтожился методом Free?
2) как его действительно уничтожить?
3) как прервать в обработчике исключения выполнение конструктора?
Заранее благодарен.
← →
ЮЮ © (2006-02-28 08:21) [1]сам же перекрыл exception. Исключение в конструкторе и приведет к "несозданию" экземпляра.
ShowMessage в конструкторе зачем?
inherited Create(AOwner);
try
Name:=AName;
except
on EComponentError do
begin
ShowMessage("Неверное имя!");
end;
raise;
end;
← →
FunkyByte © (2006-02-28 08:36) [2]Большое спасибо. Вот так всё работает как надо:
constructor TMyClass.Create(AOwner: TComponent; AName: String);
begin
inherited Create(AOwner);
try
Name:=AName;
except
on EComponentError do
raise EComponentError.Create("Неверное имя!");
end;
FMyField:=20;
...
end;
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.045 c