Главная страница
    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.47 MB
Время: 0.003 c
15-1287606541
Юрий
2010-10-21 00:29
2011.02.06
С днем рождения ! 21 октября 2010 четверг


15-1287138691
xayam
2010-10-15 14:31
2011.02.06
Чего выбрать из SSD?


2-1289696791
kiro
2010-11-14 04:06
2011.02.06
Запуск программы в консоле


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


15-1287952139
Юрий
2010-10-25 00:28
2011.02.06
С днем рождения ! 25 октября 2010 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский