delphi - 在Delphi中获取发送方组件的数组索引

标签 delphi

当我有20个组件的数组,可以从代码中以编程方式创建,并向所有组件添加相同的onClick过程时,是否可以通过Sender变量获取组件的数组索引步骤?

我知道我可以通过(Sender as TComponentType).Property访问其他属性,但这几乎就是我想到的与Sender变量有关的所有内容。

例:

var Button: array [0..9] of TButton;

for i := 0 to 9 do
  begin
    Button[i]:=TButton.Create(Self);
    Button[i].OnClick:=ButtonClick;
  end;


procedure ButtonClick(Sender: TObject);
begin
  // Here I'd like to get the "i" of the sender Button[i]
end

最佳答案

为了清楚起见,将不同的答案发布为社区Wiki(对我来说没有投票),因为没有人出于某些奇怪的原因愿意发布它们

您可以从TButton创建自定义后代,然后向其中添加自己的字段:

type
  TMyButton = class(TButton)
  public
    Tag2: Integer;
  end;

for i := 0 to 9 do
begin
  Button[i] := TMyButton.Create(Self);
  Button[i].OnClick := ButtonClick;
  Button[i].Tag2 := i;
end;

procedure ButtonClick(Sender: TObject);
var
  i: Integer;
begin
  // get the "i" of the sender Button from Tag
  i := TMyButton(Sender).Tag2;
end;

关于delphi - 在Delphi中获取发送方组件的数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28422710/

相关文章:

delphi - Rave Reports Delphi 7 中的横向打印

delphi - 是否可以在运行时创建TClientDataSet嵌套(一对多)数据集

VCL 的 Delphi TExpander 等效项

delphi - 使用 Spring4D 进行构造函数注入(inject)时出现 "Unsatisfied constructor"

delphi - 如何在Delphi 2009中将UTF-8字符串转换为PChar

c# - 使用/不使用 JCL 在 Delphi 中托管 CLR - 示例

Delphi 没有足够的 RTTI 可用于支持此操作

delphi - 获取和删除在 DLL 中创建的对象

delphi - 使用 "HNetCfg.NATUPnP"Ole对象进行端口转发失败

sql - 如何在分配参数之后、打开之前记录 SQL.text