У меня есть процедура с Sender: TObject
параметром
procedure TForm1.FormCreate(Sender: TObject);
Как я могу снова вызвать эту процедуру?
Эта версия не работает:
TForm1.FormCreate(Sender: TObject);
Заранее спасибо.
У меня есть процедура с Sender: TObject
параметром
procedure TForm1.FormCreate(Sender: TObject);
Как я могу снова вызвать эту процедуру?
Эта версия не работает:
TForm1.FormCreate(Sender: TObject);
Заранее спасибо.
Я предполагаю, что вы хотите вызвать процедуру FormCreate
экземпляра TForm1
.
Вы можете использовать FormCreate(Self)
или FormCreate(nil)
(или вы можете передать любой экземпляр TObject
в качестве параметра), если вы находитесь внутри класса TForm1
. В противном случае вы должны написать Form1.FormCreate(Self)
или Form1.FormCreate(nil)
или аналогично, где Form1
- соответствующий экземпляр TForm1
.
Во всяком случае, вызывать FormCreate
процедуру в более позднее время не особо «элегантно». Действительно, название ясно предполагает, что процедура вызывается при создании формы.
Если конкретная часть логики вашего FormCreate
метода требуется на других этапах, и вы просто не хотите дублировать код, вам, вероятно, следует реализовать этот фрагмент в виде отдельного метода (процедуры или функции) и также вызвать его в FormCreate
как и в других частях вашей программы, если это необходимо.
Но тогда вам может быть лучше вообще перенести эту часть вашей бизнес-логики из FormCreate
. Что мы обычно делаем в FormCreate
, так это создаем / инициализируем объекты, которые позже неинициализируются / уничтожаются в FormDestroy
(при необходимости). Итак, хорошо подумайте, что вы делаете в FormCreate
, может быть, есть лучшее, логически более подходящее место для некоторых или всех действий, которые вы реализовали в этом методе.
FormCreate
имеет смысл выполнить несколько раз. Поместите эту часть в отдельную процедуру с подходящим именем, например LoadListOfFiles
(или любым другим, имеющим смысл в вашем приложении - скорее всего, не с этим именем!). Затем позвоните LoadListOfFiles
в свой FormCreate
и в любое другое время, когда захотите. Таким образом, вы также можете делать в FormCreate
вещи, которые вы должны делать только тогда, когда форма действительно создана.
- person Andreas Rejbrand; 24.03.2012
TForm1 = class(TForm) MainMenu1: TMainMenu; procedure ajax(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure ajax(Sender:TObject); begin end;
- person Liviu Solcovenco; 24.03.2012
implementation
, вы указываете его имя вместе с именем class, которому он принадлежит. В вашем случае заголовок метода в implementation
должен читать: procedure TForm1.ajax(Sender: TObject);
. …
- person Andriy M; 24.03.2012
ajax
: …; ajax(whatever); …
. Вы можете сделать это из метода того же класса. Но когда вы вызываете ajax
в методе другого класса, укажите соответствующее имя экземпляра в качестве префикса: …; Form1.ajax(whatever); …
.
- person Andriy M; 24.03.2012
self.FormCreate(self)
или простоFromCreate(self)
, а если вам не нужен отправитель -FormCreate(nil)
. кстати, не стоит снова звонитьFormCreate
. - person teran   schedule 24.03.2012