Динамическое Создание Форм

Я создаю свои формы во время выполнения Примерно так:

AboutForm := TAboutForm.Create(AboutForm);
try
  AboutForm.ShowModal;
finally
  AboutForm.Free;
end;

но в чем разница, хотя в использовании любого из них:

AboutForm := TAboutForm.Create(Self);
AboutForm := TAboutForm.Create(nil);
AboutForm := TAboutForm.Create(Application);

все они, кажется, работают одинаково из того, что я вижу, но что правильно, или все они правильны, что обычно лучше всего использовать?

оцените ваши комментарии спасибо:)

3 ответов


В TForm.Create принимает Owner в качестве параметра.

в вашем первом примере, AboutForm является собственником. Что, очевидно, плохая идея, так как она еще не создана.

, когда Self - Это параметр, экземпляр, который делает вызов владельца.
Когда Application является параметром, приложение является владельцем.
Когда nil является параметром, AboutForm doen не имеет владельца. Это все хорошо, но в этих случаях вы должны помнить, чтобы освободить сама форма.

когда вы передаете владельца, вам на самом деле не нужно освобождать меня явно. Владелец освободит его, когда освободит владельца.

вот как должен выглядеть ваш код:

AboutForm := TAboutForm.Create(nil);
try
  AboutForm.ShowModal;
finally
  AboutForm.Free;
end;

когда вы создаете форму динамически, то есть форма available форма. Вы должны пройти owner формы.

enter image description here

.. Так что в вашем случае

AboutForm := TAboutForm.Творить (Себя);

AboutForm := TAboutForm.Create (nil);

AboutForm := TAboutForm.Создать (Приложение);

  1. Self
  2. Нил
  3. приложение

является владельцем for AboutForm (Как вы уже знаете это)

But what is the difference though in using any of these:

вот что-то из около.com-форма владельца

Нил - указывает, что ни один объект не владеет формой - и поэтому разработчик (вы) несет ответственность за освобождение созданной формы (by вызов ссылки.Бесплатно, когда вам больше не нужна форма)

Self - указывает объект, в котором вызывается метод. Если, например, вы создаете новый экземпляр формы TMyForm из обработчика OnClick кнопки (где эта кнопка помещена в MainForm) - self ссылается на "MainForm". Таким образом, когда Фриинформ освобождается - это также бесплатные "ссылки".

приложение - задает глобальную переменную типа TApplication создается при запуске приложения. "Приложение" инкапсулирует ваше приложение, а также предоставляет множество функций, которые происходят в фоновом режиме программы.

и это тоже Владелец Форма

а)Formx.Create (Application) -> ресурсы формы будут освобождены, когда приложение будет прекращено

б)Formx.Create (Self) - > ресурсы формы освобождаются при уничтожении объекта владельца (если Self является потомком TComponent)

С)Formx.Create (nil) -> вы несете ответственность за освобождение формы.

Это

a используется delphi, когда форма создается автоматически

b удобно для основной формы, которая имеет несколько дочерних окон, которые нужно закрыть, когда основная форма закрыта

c очень удобно для отображения диалогового окна

для освобождения вас может сделать это ACtion := caFree onclose формы.


первый

AboutForm := TAboutForm.Create(AboutForm);

сообщает TAboutForm, что его владельцем является объект, который был назначен указателю "AboutForm" раньше (также может быть NIL -> No Owner).

параметр "владелец"

TForm.Create(Owner: TComponent) 

сообщает форму, кто является ее владельцем. Tкомпоненты регистрируются у своего владельца, если таковые имеются. Значит, есть какая-то связь между владельцем и его ребенка.

пример: если владелец освобождается, он можете свободно им владеет компоненты.

таким образом,

TAboutForm.Create(Self);

означает, что" Self " является владельцем новой TAboutForm, если (Self is TComponent).

TAboutForm.Create(NIL);

также является приемлемым решением, но здесь вы должны сами освободить компонент (за исключением того, что вы создаете TAboutForm в MDI-окне).