gpt4 book ai didi

arrays - Delphi如何释放动态实例化的按钮数组?

转载 作者:行者123 更新时间:2023-12-03 18:26:18 27 4
gpt4 key购买 nike

我在释放在frmTransaction.Show上创建的按钮数组时遇到问题
从再次显示时,我收到无效的操作错误。
当我用其他用户运行该程序时,它说已经有该名称的项目了:)
这段代码是我程序中唯一可以释放内存的部分

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;

最佳答案

SetLength函数设置动态数组的长度。高位成员将为MyArray[Length(MyArray)-1](在代码的第二部分中使用了高位函数)。您的代码正在寻址成员btnSale[i],因此它对成员#0没有任何作用,并且正在寻址高边界上方的成员btnSale[Length(btnSale)]

尝试使用这个。

    SetLength(btnSale,iTrans);
for i := 0 to iTrans-1 do
// or this for i := low(btnSale) to high(btnSale) do
begin
...
btnSale[i] := TButton.Create(gbxSales);
with btnSale[i] do
...

end;

关于arrays - Delphi如何释放动态实例化的按钮数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32224071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com