2012-11-15 2 views
0

다소 혼란 스럽지만 설명하는 것이 가장 좋습니다. 자세한 내용이 필요한지 물어보십시오.삭제, 추가, 편집 stringList

우선 내가 지금 클래스를 만들 FTherePlayers := TPlayers.Create

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; 

TPlayers과 같이라는 클래스를 ..을. 내가 너무

FTherePlayers.Player[strtoint(name2)].Add('posx='+inttostr(posL.x)); 

처럼 또는 변수로 stringlist에 추가 처음이 괜찮을 것 같다

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라고하지만 왜 changeing하지 그 어떤 생각 (12)해야 하는가? 감사 글렌

+4

당신은 FTherePlayers.Player [strtoint (ID)] '의 오타가 값 ['POSX = '] : = xpos;', 그것은'FTherePlayers.Player [strtoint (ID)]이어야합니다. 값 [ '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; 
관련 문제