Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.011 c
4-1244878777
Vampire Kain
2009-06-13 11:39
2011.02.06
Как получить координаты чужого окна?


15-1288166553
DVM
2010-10-27 12:02
2011.02.06
Опять перепись 2010


15-1287738749
istok
2010-10-22 13:12
2011.02.06
категории программ..


3-1252485463
Xmen
2009-09-09 12:37
2011.02.06
Unable to determine field names


2-1289755463
Gu
2010-11-14 20:24
2011.02.06
Окно ожидания в отдельном потоке