gpt4 book ai didi

delphi - 在新单元中查找组件的过程

转载 作者:行者123 更新时间:2023-12-03 19:38:07 25 4
gpt4 key购买 nike

我尝试创建新的单位Ado_Op,在此unit中,我尝试创建如下的procedure

procedure CloseAllTables ();
Var I : Integer; T : TADOTable;
begin
for I := 1 to ComponentCount-1 do
if Components[i] is TADOTable then
begin
T := FindComponent(Components[i].Name) as TADOTable;
T.Close;
end;
T.Destroy;
end;


错误:


ComponentCount无法访问。


注意:我正在使用Delphi 10 Seattle。

最佳答案

您报告的编译器错误只是问题的开始。还有很多。我看到以下问题,其中第1项是问题中指出的问题:


您需要提供一个对象,以在其上引用属性ComponentCountComponents[]
您错误地使用了基于一个的索引。
您无需调用FindComponent即可找到您已经拥有的组件。
您只能对最后找到的任何对象调用一次Destroy。或在未初始化的变量上(如果找不到)。编译器应对此发出警告,我希望您已启用警告和提示,并注意它们。


根据注释,您尝试在表单拥有的每个表上调用Close方法。这样做:

procedure CloseAllTables(Owner: TComponent);
var
i: Integer;
begin
for i := 0 to Owner.ComponentCount-1 do
if Owner.Components[i] is TADOTable then
TADOTable(Owner.Components[i]).Close;
end;


如果您也想破坏所有这些组件,我对此表示怀疑,那么您将需要按降序运行循环。这是因为销毁组件时,会将其从组件的所有者列表中删除。假设不需要在即将被销毁的对象上调用 Close,则该代码将如下所示。

procedure DestroyAllTables(Owner: TComponent);
var
i: Integer;
begin
for i := Owner.ComponentCount-1 downto 0 do
if Owner.Components[i] is TADOTable then
Owner.Components[i].Free;
end;

关于delphi - 在新单元中查找组件的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41396500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com