Главная страница
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.5 MB
Время: 0.01 c
3-1251976429
kyn66
2009-09-03 15:13
2011.02.06
После обновления компонентов ADS - ошибка


2-1289927150
Zoia Ziberman
2010-11-16 20:05
2011.02.06
Программа на Делфе


2-1290080637
noob_one
2010-11-18 14:43
2011.02.06
Как добавить свою строчку в меню, которое появляется по


15-1287856169
Кто б сомневался
2010-10-23 21:49
2011.02.06
Помогите перевести


4-1245062957
василий иванович
2009-06-15 14:49
2011.02.06
самописный CSP