if Button = nil then
Button = TButton.Create();
Как узнать создан ли объект?
У меня есть объект
var
Button: TButton;
При наступлении события, например щелчке мышью, требуется узнать создани ли объект. Если не создан - создать (Button:=TButton.Create). Если уже создан - работать с ним. Есть ли функции для проверки существования объекта или что-то подобное? Использовать защищеный блок (try ... except) не предлагать.
Код:
hardcase, а почему не Assigned?
Цитата: makbeth
hardcase, а почему не Assigned?
Один фиг, он на nil сравнивает. Хотя, признаюсь, забыл о нем.
Код:
Button:=nil;
а уже в коде программы проверять
Код:
if Assigned(Button) then...
или я опять чего-то не понял...
Код:
Assigned(Button)
Хотя все действительно сводится к одному - проверке указателя на nil и прямые руки тут совсем не помешают. Уничтожать объект надо так:
Код:
if Assigned(Button)
then begin
Button.free;
Button := nil;
end;
then begin
Button.free;
Button := nil;
end;
Тогда ошибка очень маловероятна, но не исключена, опять таки. Оказалось, что фраза типа:
Код:
Button1 is TButton
Вернет "истина", даже после такого:
Код:
Button1.Free;
TEdit(Button1) := TEdit.Create(Self);
TEdit(Button1) := TEdit.Create(Self);
(а по сути правильно, ведь мы объявили Button1 как TButton, а какие имена мы присваиваем типам, переменным и классам интересно только компилятору)Так что объект класса и переменная, которая ссылается на объект класса - совсем разные вещи! Кстати я проверил - Button.Free вполне достаточно чтобы полностью унчтожить объект вместе с указателем (а ведь учили меня совсем по другому :confused:). Главное - лишнего не извращаться и не самодельничать, тогда ошибки можно миновать. А для этого чаще смотреть документацию.
Код:
if Assigned(Button)
then begin
Button.free;
Button := nil;
end;
then begin
Button.free;
Button := nil;
end;
Код:
FreeAndNil(Button1);
Цитата:
Кстати я проверил - Button.Free вполне достаточно чтобы полностью унчтожить объект вместе с указателем (а ведь учили меня совсем по другому :confused:).
:eek: Это как?