这有点令人困惑,但会尽力解释。请询问您是否需要更多详细信息。
首先,我有一个名为TPlayers
的课程,如此......
TPlayers = class
Private
p : array[1..20] of TStringList;
function GetPlayer(i:integer): TStringList;
Public
Property player[i : integer] : TStringList read GetPlayer;
constructor Create; virtual;
implementation
uses
main;
{constructor}
constructor TPlayers.Create;
begin
p[1] := TStringList.Create;
p[2] := TStringList.Create;
p[3] := TStringList.Create;
p[4] := TStringList.Create;
p[5] := TStringList.Create;
p[6] := TStringList.Create;
end;
function TPlayers.GetPlayer(i: integer): TStringList;
begin
Result := p[i];
end;
我现在有FTherePlayers := TPlayers.Create
来创建课程。
我第一次像这样添加到stringlist
FTherePlayers.Player[strtoint(name2)].Add('posx='+inttostr(posL.x));
或取出变量
FTherePlayers.Player[1].Add('posx=15');
这似乎很好,但接下来我尝试更新它
FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;
或取出变量
FTherePlayers.Player[1].Values['posx='] := 12;
然后我在更改后检查该值,它仍然显示15,因此当我做
时showmessage(fthereplayers.player[1].Values['posx']);
它返回15但它应该是12.知道它为什么不改变? 谢谢 格伦
答案 0 :(得分:5)
Values
属性的Name
索引值末尾有一个额外的等号。您只需要使用名称值对的名称部分而不使用等号。因此,在您的代码中只需替换以下行:
// here is an extra equals sign in 'posx=' index value
FTherePlayers.Player[1].Values['posx='] := 12;
FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;
用这个:
FTherePlayers.Player[1].Values['posx'] := 12;
FTherePlayers.Player[strtoint(ID)].Values['posx'] := xpos;