这有点令人困惑,但会尽力解释它.请询问您是否需要更多详细信息.
首先,我有一个叫做TPlayersLike 的课程.
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;
Run Code Online (Sandbox Code Playgroud)
我现在必须FTherePlayers := TPlayers.Create创建这个类.我第一次像这样添加到stringlist
FTherePlayers.Player[strtoint(name2)].Add('posx='+inttostr(posL.x));
Run Code Online (Sandbox Code Playgroud)
或者取出变量
FTherePlayers.Player[1].Add('posx=15');
Run Code Online (Sandbox Code Playgroud)
这似乎没问题,但接下来我尝试更新它
FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;
Run Code Online (Sandbox Code Playgroud)
或者取出变量
FTherePlayers.Player[1].Values['posx='] := 12;
Run Code Online (Sandbox Code Playgroud)
但是我在更改之后检查了这个值,它仍然说15,所以当我这样做
showmessage(fthereplayers.player[1].Values['posx']);
Run Code Online (Sandbox Code Playgroud)
它返回15但它应该是12.知道它为什么不改变?谢谢格伦
您Name在Values属性的索引值末尾有一个额外的等号.您只需要使用名称值对的名称部分而不使用等号.因此,在您的代码中只需替换以下行:
// here is an extra equals sign in 'posx=' index value
FTherePlayers.Player[1].Values['posx='] := 12;
FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;
Run Code Online (Sandbox Code Playgroud)
有了这个:
FTherePlayers.Player[1].Values['posx'] := 12;
FTherePlayers.Player[strtoint(ID)].Values['posx'] := xpos;
Run Code Online (Sandbox Code Playgroud)