我有一個問題,解放了我在frmTransaction.Show上創建的按鈕數組 當from from再次顯示時,我得到無效的操作錯誤。 當我使用不同的用戶運行程序,它說有物品已經與該名:) 這段代碼是我的計劃的唯一部分,我的空閒內存德爾福如何釋放動態實例化按鈕的數組?
SetLength(btnSale,iTrans);
for i := 1 to iTrans do
begin
readln(tPos,sPos);
iPos := Pos(';',sPos); //Gets positions of buttons
sTop := Copy(sPos,1,iPos-1);
sLeft := Copy(sPos,iPos+1,length(sPos));
btnSale[i] := TButton.Create(gbxSales);
with btnSale[i] do
begin
Parent := gbxSales;
name := 'Transaction' +
IntToStr(dmdata.tblTransactions['TransactionID']); //Creates buttons that represent Transactions
Caption := 'Sale ' + IntToStr(i);
Width := 153;
Height := 97;
Top := StrToInt(sTop);
left := strToInt(sleft);
show;
onClick := ClickSale;
end;
dmdata.tblTransactions.Next;
end;
procedure TfrmTransactions.FormHide(Sender: TObject);
var
i : integer;
begin
for i := low(btnSale) to high(btnSale) do //frees dynamically created objects
begin
btnSale[i].Free;
btnSale[i] := nil;
end;
end;
您已刪除程序的關鍵部分。我們無法看到第一部分代碼的位置。沒有必要給這些控件名稱。我們不知道「與不同的用戶」是什麼意思。請把它剪下來做一個MCVE。 –
你確定要創建/釋放'FormShow' /'FormHide'中的按鈕嗎?爲什麼不在'FormCreate'中創建它們?那麼你不需要明確地釋放它們,因爲你在創建它時定義了一個所有者。 –
您是否嘗試過在FormHide中設置斷點來檢查釋放是否真的發生了?另外,什麼時候創建的?我們無法從您的代碼中看到,請顯示所有相關代碼。 – GuidoG