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 执行安全类型转换(并在出现问题时抛出异常),而第二个版本不进行这些检查。
在 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 执行安全类型转换(并在出现问题时抛出异常),而第二个版本不进行这些检查。