Delphi-Rad Studio-Android- 在运行时创建一些按钮并使用属性值

Delphi-Rad Studio-Android- Create some Buttons at runtime and use the properties values

在 android 应用程序中,我正在创建一些按钮(将创建的按钮数量取决于我从服务器获得的一些信息,并且每次使用时都可以更改应用程序,因此按钮的数量可能会改变)。我得到的信息,我放入了 3 个备忘录(Memo1、Memo2 和 Memo3)。 Memo1 有数字,Memo2 有按钮文本 属性 的名称,Memo3 有一个唯一的数字,我想稍后使用这取决于我从我创建的按钮中单击的按钮。按钮创建的代码是这样的(在菜单中)。

for n := i-1 downto 0 do
  begin
     if Memo1.lines[n]='2' then // the buttons created only if this statement is true
      begin
      btnRunTime := TButton.Create(OptTab);
       with btnRunTime do begin
         Align := TAlignLayout.Top;
         Visible := True;
         Margins.Top := 5;
         Height := 60;
         TintColor := $FF1AB9B9;
         FontColor := $FF1E1E86;
         Text := Memo2.Lines[n];
         Name := 'btn_'+IntToStr(n);
         Tag := StrToInt(Memo3.Lines[n]); // unique number
         Parent := OptTab.Rectangle2;
         OnClick := OptTab.CommandClick;
       end;
       num := num + 1;
      end;
  end;

按钮以另一种形式 (OptTab) 在矩形中创建,我使用事件 Commandclick,当我单击任何创建的按钮时触发该事件。到目前为止,一切都很好。 问题是,当我单击任何按钮时,我想使用特定的 属性(标记),我将唯一编号放入其中。

procedure TOptTab.CommandClick(Sender: TObject);
 begin
  id:=IntToStr(Tag);
  ShowMessage(id);
 end;

当我点击它时,它会显示 Form OptTab 的标签,它是 0,而不是我点击创建的按钮的标签。有没有办法让应用程序看到我点击了哪个按钮并获取它的标签? (顺便说一句,我检查了所有创建和工作正常的备忘录和按钮,并且不使用(如果)检查 Memo2 中的名称文本以查找唯一值,因为服务器也可能发生变化)这就是我的原因我正在尝试标记 属性。感谢您的帮助!

Sender 是按下的按钮。通常也最好为 id.

使用局部变量
procedure TOptTab.CommandClick(Sender: TObject);
begin
  var id :=  IntToStr((Sender as TButton).Tag);
  ShowMessage(id);
end;

或者如果您确定它始终是一个 TButton 传递:

procedure TOptTab.CommandClick(Sender: TObject);
begin
  var id :=  IntToStr(TButton(Sender).Tag);
  ShowMessage(id);
end;

第一个版本使用 RTTI 执行安全类型转换(并在出现问题时抛出异常),而第二个版本不进行这些检查。