在 Delphi 中,你可以通过递归或者直接遍历 TForm
上的所有控件(TControl
)。TForm
继承自 TWinControl
,它有一个 Controls
属性,可以用于访问包含的所有控件。这个属性是一个数组,存储的是当前窗体上所有的控件。
代码示例:遍历 Form
上的所有 TControl
procedure TraverseControls(AControl: TWinControl);
var
i: Integer;
Control: TControl;
begin
for i := 0 to AControl.ControlCount - 1 do
begin
Control := AControl.Controls[i];
// 输出控件名称和类型
if Control.Name <> '' then
ShowMessage('Control Name: ' + Control.Name + ', Type: ' + Control.ClassName);
// 如果该控件是容器控件,则递归遍历其子控件
if Control is TWinControl then
TraverseControls(TWinControl(Control));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// 遍历当前 Form 上的所有控件
TraverseControls(Self);
end;
代码说明:
TraverseControls
递归方法:该方法接收一个TWinControl
参数,表示当前要遍历的控件容器。TWinControl
是所有能够包含子控件的控件的基类,如TForm
、TPanel
等。ControlCount
和Controls
:TWinControl
有ControlCount
属性,用于获取控件的数量,而Controls[i]
用于访问其中的每个控件。- 递归遍历:如果控件是容器控件(例如
TPanel
或TGroupBox
),则递归调用TraverseControls
来遍历其子控件。 - 显示控件信息:你可以使用
Control.Name
和Control.ClassName
来获取控件的名称和类型,并可以根据需要进行其他处理。
扩展:
-
遍历指定类型的控件:如果你只想遍历某种类型的控件,可以在遍历时使用
is
关键字进行类型检查。例如,只遍历按钮控件:
if Control is TButton then
ShowMessage('Button Name: ' + Control.Name);
总结:
这个递归方法可以帮助你遍历 Form
上的所有控件,并且可以进一步扩展以实现更加复杂的操作,如查找特定控件、修改控件属性等。