删除,添加,编辑stringList

Gle*_*rse 0 delphi delphi-xe2

这有点令人困惑,但会尽力解释它.请询问您是否需要更多详细信息.

首先,我有一个叫做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.知道它为什么不改变?谢谢格伦

TLa*_*ama 5

NameValues属性的索引值末尾有一个额外的等号.您只需要使用名称值对的名称部分而不使用等号.因此,在您的代码中只需替换以下行:

// 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)