Delphi:如何在公共函数中使用 ComponentCount?
Posted
技术标签:
【中文标题】Delphi:如何在公共函数中使用 ComponentCount?【英文标题】:Delphi: how to use ComponentCount in a public function? 【发布时间】:2014-11-12 02:52:07 【问题描述】:我下面有这个使用ComponetCount的函数,当我在另一个Form中使用这个函数时,它在一个Form1中,将Form2放在Form1中使用,它带来的是Form1的Componetes数量而不是Form2的数量,我该怎么做解决这个问题?跟随功能:
function Form1.getgridId(KeyField: String): string;
var
i: Integer;
id: string;
begin
for i := 0 to ComponentCount -1 do
begin
if Components[i] is TCustomDBGrid then
id:= TCustomDBGrid(Components[i]).DataSource.DataSet.FieldByName(KeyField).AsString;
end;
Result := id;
end;
ANS(在我的具体情况下)- 在所有人的帮助下:
function getgridId(KeyField: String): string;
var
i: Integer;
id: string;
begin
for i := 0 to Screen.ActiveForm.ComponentCount -1 do
begin
if Screen.ActiveForm.Components[i] is TCustomDBGrid then
id := TCustomDBGrid(Screen.ActiveForm.Components[i]).DataSource.DataSet.FieldByName(KeyField).AsString;
end;
Result := id;
end;
【问题讨论】:
我不知道你在问什么。您要实例化什么类?此代码与您的问题有何关系?你说的是什么单位? 组件在一个表格或类似的地方,而不是在一个单元上。因此,将该表单(已经实例化?)传递给函数并迭代其组件。还是传递网格本身而不迭代? 您确定要找到 lastTDBGrid
的值吗?
为了清楚起见,我编辑了这个问题。 @RobKennedy
你想说什么“UnitX 中的组件数量”? TComponent.ComponentCount
与单位无关
【参考方案1】:
您所要求的需要向函数添加一个参数以知道要迭代哪个表单:
function getgridId(Form: TForm; KeyField: String): string;
var
i: Integer;
id: string;
begin
for i := 0 to Form.ComponentCount -1 do
begin
if Form.Components[i] is TCustomDBGrid then
id := TCustomDBGrid(Form.Components[i]).DataSource.DataSet.FieldByName(KeyField).AsString;
end;
Result := id;
end;
然后,当每个Form需要调用该函数时,它可以将它的Self
指针作为第一个参数传递。
【讨论】:
谢谢,我以为componentcount会自动识别调用函数的形式。我认为Delphi有一个getformname函数但不记得在哪里。 Screen.ActiveForm 获取 TForm 或 .name 获取字符串 :D @Artur_Indio:ComponentCount
/Components[]
做识别他们被调用的形式。您使您的函数成为Form1
类的成员,并且您使用函数的Self
参数来访问ComponentCount
/Components[]
,因此您总是使用Form1
对象指针调用该函数,因此遍历Form1
的组件,即使该函数实际上是从Form2
调用的。要迭代 Form2
的组件,您必须使用 Form2
对象指针来访问 ComponentCount
/Components[]
,而您没有这样做。
谢谢你的解释,我会完善我的功能。以上是关于Delphi:如何在公共函数中使用 ComponentCount?的主要内容,如果未能解决你的问题,请参考以下文章
Delphi中如何实现模拟组合按键,如发送Ctrl+F的按键