Delphi 如何找到主TForm应用程序对象的所有子窗体?

Delphi 如何找到主TForm应用程序对象的所有子窗体?,delphi,firemonkey,delphi-xe5,Delphi,Firemonkey,Delphi Xe5,我正在为Windows和OSX开发一个应用程序,我想在应用程序中找到主TForm对象的所有子窗体 在Delphi XE5中有这样做的方法吗?简单地说,我想迭代应用程序的所有组件 移至评论中的问题: 我正在查找应用程序中的每个TForm后代 您是指通过应用程序的主窗体以这种方式创建的任何窗体吗 procedure TMyMainForm.CreateSubForm; begin TMySubForm.Create(Self); end; 试试这个 procedure FindMainFor

我正在为Windows和OSX开发一个应用程序,我想在应用程序中找到主TForm对象的所有子窗体

在Delphi XE5中有这样做的方法吗?简单地说,我想迭代应用程序的所有组件

移至评论中的问题:

我正在查找
应用程序中的每个
TForm
后代


您是指通过应用程序的主窗体以这种方式创建的任何窗体吗

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;
过程FindMainFormSubForms(列表:TList);
变量
i:整数;
主要形态:TForm;
开始
mainForm:=Application.mainForm;
对于i:=0到mainForm.ComponentCount-1 do
开始
如果mainForm.Components[i]是TForm,那么
列表.添加(TForm(mainForm.Components[i]);
结束;
结束;

所有形式的总应用程序都位于。您可以使用

过滤器选项:
  • 如果只需要主窗体拥有的窗体,请检查
    Screen.CustomForms[I].Owner=Application.MainForm
  • 如果您只需要主窗体的父窗体,请检查
    Screen.CustomForms[I].Parent=Application.MainForm
计量吸入器: 如果您的主窗体是MDI窗体,并且您希望了解其所有MDI子窗体,则所有子窗体都位于其中,您可以使用它进行迭代。

在FMX中,您使用属性枚举应用程序中的所有窗体对象:

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

你能定义一下“应用程序中主TForm对象的子窗体”是什么意思吗?你能澄清这个问题吗?您想要您所处的应用程序主窗体的子窗体吗?还是外部应用程序?是的,应用程序的主要形式的子窗体。您认为什么是“子窗体”?将主窗体设置为其
所有者
和/或
父窗体
?请说得更具体些。-1因为您不清楚自己实际上在问什么,并且在被问到时拒绝澄清您的问题。如果
MainForm
是子TForm对象的
父对象,可以使用类似的方法,通过迭代
控件[]
列表而不是
组件[]
list。那么在运行时创建的表单呢。。。并分配给project main Unit.pas文件中的全局变量?它们是否也在Components[]列表中?如果表单是在没有所有者的情况下创建的呢?我习惯这样做。如果它没有主窗体作为它的所有者或父窗体,我不确定你是否可以称它为主窗体的“子窗体”。在这一点上,您必须在主窗体上维护您自己的列表,在这种情况下,您已经有了对它们的引用,并且没有问题要回答。我的回答是预先假设的,而且措辞相当糟糕question@JTolley从注释到问题:“查找应用程序中的每个TForm子代”