我正在开发Windows和OSX的应用程序,我想在Application中找到主要TForm对象的所有子表单。
有没有办法在Delphi XE5中执行此操作?简单地说,我想迭代应用程序的所有组件。
移至评论中的问题:
我希望找到
TForm
中的每个Application
后代。
答案 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子表单,那么所有子表单都驻留在(Application.)MainForm.MDIChildren
中,您可以使用(Application.)MainForm.MDIChildCount
进行迭代。< / p>