删除,添加,编辑stringList

问题描述:

这有点令人困惑,但会尽力解释它。请询问你是否需要更多细节。删除,添加,编辑stringList

首先我有一个名为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.任何想法,为什么它不是量变到质变? 谢谢 Glen

+4

你有'FTherePlayers.Player [strtoint(ID)一个错字值[ 'POSX ='] := xpos;',它应该是'FTherePlayers.Player [strtoint(ID)]。Values ['posx']:= xpos;'而不是。但是公开这些字符串列表并不是一个好主意,而是创建添加方法,比如'TPlayers.AddPlayer'和索引属性,例如'TPlayers.PlayerPosition [x]',它将访问内部字符串列表的'Values'。 – TLama

+0

arg,我怎么没看见。也谢谢,我都准备好了一个addplayer,但我想到了FTherePlayers.Player [x]只能通过私人获得玩家和.p [x]访问,因此可以,但添加一个可以访问值的玩家位置并不困难做,只是没有看到这一点..但我仍然是一种新的德尔菲和它的共同构造 –

+0

如果你使用上面的delphi2010然后看看添加Generics.Collections。 TList,TObjectList,TDictionary和TObjectDictionary – Ravaut123

您在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;