如何找到主TForm Application对象的所有子表单?

时间:2014-02-19 14:44:36

标签: delphi firemonkey delphi-xe5

我正在开发Windows和OSX的应用程序,我想在Application中找到主要TForm对象的所有子表单。

有没有办法在Delphi XE5中执行此操作?简单地说,我想迭代应用程序的所有组件。

移至评论中的问题:

  

我希望找到TForm中的每个Application后代。

3 个答案:

答案 0 :(得分:3)

你的意思是通过应用程序的主窗体以这样的方式创建的任何表单吗?

procedure TMyMainForm.CreateSubForm;
begin
   TMySubForm.Create(Self);
end;

试试这个

procedure FindMainFormSubForms(list : TList<TForm>);
var
    i : integer;
    mainForm : TForm;
begin
    mainForm := Application.MainForm;
    for i := 0 to mainForm.ComponentCount - 1 do
    begin
        if mainForm.Components[i] is TForm then
            list.Add(TForm(mainForm.Components[i]));
    end;
end;

答案 1 :(得分:3)

在FMX中,您使用TScreen.Forms[]属性枚举应用程序中的所有表单对象:

for i := 0 to Screen.FormCount-1 do
  DoSomethingWith(Screen.Forms[i]);

答案 2 :(得分:2)

整个应用程序的所有形式都位于Screen.CustomForms。您可以使用Screen.CustomFormCount迭代它们。

过滤器选项:

  • 如果您只想要主表单所拥有的表单,请检查Screen.CustomForms[I].Owner = Application.MainForm;
  • 如果您只想要主表单为父级的表单,请检查Screen.CustomForms[I].Parent = Application.MainForm;

MDI:

如果您的主表单是MDI表单,并且您想知道其所有MDI子表单,那么所有子表单都驻留在(Application.)MainForm.MDIChildren中,您可以使用(Application.)MainForm.MDIChildCount进行迭代。< / p>