我正在开发一个适用于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
进行迭代。