2012-11-15 195 views
0

這有點令人困惑,但會盡力解釋它。請詢問你是否需要更多細節。刪除,添加,編輯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

回答

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; 
相關問題