在 android 應用程式中,我正在創建一些按鈕(將創建的按鈕數量取決于我從服務器獲取的一些資訊,并且每次使用應用程式時都可以更改,因此按鈕的數量可能改變)。我得到的資訊,我放入了 3 個備忘錄(備忘錄 1、備忘錄 2 和備忘錄 3)。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;
當我點擊它時,它會顯示表單 OptTab 的標簽,它是 0,而不是我點擊的創建按鈕的標簽。有沒有辦法讓應用程式查看我點擊了哪個按鈕并獲取它的標簽?(順便說一句,我檢查了所有創建并正常作業的備忘錄和按鈕,并且不使用(如果)檢查 Memo2 中的名稱文本以查找唯一值,因為服務器也可能發生變化)這就是為什么我我正在嘗試 Tag 屬性。我很感激任何幫助!
uj5u.com熱心網友回復:
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 執行安全型別轉換(如果有問題則拋出例外),而第二個版本不進行這些檢查。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/433773.html
