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



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

有没有办法在德尔福XE5中做到这一点?简单地说,我想迭代应用程序的所有组件。

从评论中移至问题:

我正在寻找Application的每一个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;

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

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

所有形式的应用程序都驻留在Screen.CustomForms 中。您可以使用 Screen.CustomFormCount 迭代它们。

过滤器选项:

  • 如果只需要主窗体拥有的窗体,请检查Screen.CustomForms[I].Owner = Application.MainForm;
  • 如果您只需要由主窗体父级的窗体,请检查Screen.CustomForms[I].Parent = Application.MainForm;

计量吸入器:

如果您的主窗体是 MDI 窗体,并且您想知道其所有 MDI 子窗体,则所有子窗体都驻留在 (Application.)MainForm.MDIChildren 中,您可以使用 (Application.)MainForm.MDIChildCount 进行迭代。

相关内容

  • 没有找到相关文章

最新更新