删除,添加,编辑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
答
您在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;
你有'FTherePlayers.Player [strtoint(ID)一个错字值[ 'POSX ='] := xpos;',它应该是'FTherePlayers.Player [strtoint(ID)]。Values ['posx']:= xpos;'而不是。但是公开这些字符串列表并不是一个好主意,而是创建添加方法,比如'TPlayers.AddPlayer'和索引属性,例如'TPlayers.PlayerPosition [x]',它将访问内部字符串列表的'Values'。 – TLama
arg,我怎么没看见。也谢谢,我都准备好了一个addplayer,但我想到了FTherePlayers.Player [x]只能通过私人获得玩家和.p [x]访问,因此可以,但添加一个可以访问值的玩家位置并不困难做,只是没有看到这一点..但我仍然是一种新的德尔菲和它的共同构造 –
如果你使用上面的delphi2010然后看看添加Generics.Collections。 TList,TObjectList,TDictionary和TObjectDictionary – Ravaut123