Текущий архив: 2011.02.06;
Скачать: CL | DM;
ВнизРабота с дочерними формами Найти похожие ветки
← →
Irisss (2010-11-15 14:37) [0]Из главной формы (VCL Form) создаются дочерние формы.
При закрытии главной формы нужно пройти по всем дочерним формам и закрыть их, чтобы отработал метод Close (в этом методе у каждой формы есть еще некоторые действия, которые нужно выполнить)
Вопрос:
1. как получить количество дочерних форм?
2. как обратиться к конкретной форме, зная их количество?
Спасибо
← →
12 © (2010-11-15 14:44) [1]for i := 0 to MainForm.MDIChildCount - 1 do MainForm.MDIChildren[i].Close;
← →
12 © (2010-11-15 14:45) [2]а не
or i := MainForm.MDIChildCount - 1 downto 0 do MainForm.MDIChildren[i].Close;
← →
Irisss (2010-11-15 15:05) [3]MDIChildCount показывает равно 0 при открытых формах
попробывал сделать так:count := Self.FFormManager.ComponentCount;
if ( count > 0 )
then begin
for i := count - 1 downto 0
do begin
if ( Self.FFormManager.Components[ i ] is TForm )
then begin
Caption := TForm(Self.FFormManager.Components[ i ]).Caption;
TForm(Self.FFormManager.Components[ i ]).Show;
TForm(Self.FFormManager.Components[ i ]).Close;
end;
end;
но пока ругается на метод Show,
← →
RWolf © (2010-11-15 15:11) [4]При закрытии главной формы закроется всё приложение, а значит, обработчики закрытия всех открытых форм так или иначе будут вызваны.
← →
12 © (2010-11-15 15:19) [5]
> При закрытии главной формы закроется всё приложение, а значит,
> обработчики закрытия всех открытых форм так или иначе будут
> вызваны.
>
по-идее да, но не факт
пишу
TfrmChild = class(TForm)
procedure TfrmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
TfrmSubject = class(TfrmChild)
procedure TfrmSubject.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage( "" );
inherited;
end;
не кажет ничего при закрытии TMainForm
← →
Irisss (2010-11-15 15:25) [6]приложение закрывается, а обработчики не вызываются.
Там стоит MessageDlg, он не вызывается
← →
И. Павел © (2010-11-15 15:32) [7]> приложение закрывается, а обработчики не вызываются.
> Там стоит MessageDlg, он не вызывается
Это не показатель. При Application->Terminate тоже MessageDlg не вызывается, хотя процедура, вызвавшая Terminate, выполняется до конца.
← →
RWolf © (2010-11-15 15:36) [8]
> Irisss (15.11.10 15:25) [6]
> стоит MessageDlg, он не вызывается
обработчик вызывается, просто MessageDlg не срабатывает. Если при закрытии форм нужно что-то спросить, то да, закрывать их надо вызовом метода Close перед закрытием главной формы.
← →
Irisss (2010-11-15 15:40) [9]собственно мне как раз и нужно, что показать каждую форму и спросить у пользователя, хочет он ее закрыть или нет
← →
Irisss (2010-11-15 15:43) [10]В каждой форме у меня на обработчике
FormCloseQuery стоит MessageDlg, который спрашивает, закрыть ли текущую форму
← →
clickmaker © (2010-11-15 15:43) [11]> показать каждую форму и спросить у пользователя, хочет он
> ее закрыть или нет
OnCloseQuery
← →
Irisss (2010-11-15 16:18) [12]Такой код решил мою проблему полностью (FFormManager - главная форма)
for i := Self.FFormManager.ComponentCount - 1 downto 0
do begin
if ( Self.FFormManager.Components[ i ] is TForm )
then begin
AForm := Self.FFormManager.Components[ i ] as TForm;
if ( AForm.Visible = True )
then begin
AForm.Show();
AForm.Close();
end;
end;
end;
Спасибо всем
← →
Leonid Troyanovsky © (2010-11-15 22:18) [13]
> Irisss (15.11.10 16:18) [12]
> Такой код решил мою проблему полностью (FFormManager - главная
> форма)
> for i := Self.FFormManager.ComponentCount - 1 downto
Screen.Forms.
--
Regards, LVT.
Страницы: 1 вся ветка
Текущий архив: 2011.02.06;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.003 c