2011-08-30 2 views
11

델파이 7 사용 :TStringList의 AddObject를 정수와 함께 사용 하시겠습니까?

  • 가 어떻게이 stringlist 항목의 대상 부분에 정수를 추가 할 수 있습니다를, AddObject를 사용하고 계십니까?
  • 문자열 목록 항목의 객체 속성에서 정수를 다시 검색하려면 어떻게해야합니까?
  • 모든 개체를 해제하고 완료되면 을 나열하려면 어떻게합니까?

답변

38

Q :How can i add an integer to the object portion of a stringlist item, using AddObject?

A :How can a retrieve the integer back from a object property of stringlist item?

A : : 캐스트에 그냥 TObject

List.AddObject('A string',TObject(1)); 

Q에 정수 값을 캐스팅How do i free all objects and list when done?

A : : 개체 값을

AValue := Integer(List.Objects[i]); 

Q 정수 당신이 메모리을 할당되지 때문에, 개체 목록을 확보 할 필요가 없습니다. 따라서 TStringListFree 절차로 전화하십시오.

은, 난 그냥 대답을 기록했다

{$APPTYPE CONSOLE} 

uses 
    Classes, 
    SysUtils; 


Var 
    List : TStringList; 
    i : Integer; 
begin 
    try 
    List:=TStringList.Create; 
    try 
     //assign the string and some integer values 
     List.AddObject('A string',TObject(1)); 
     List.AddObject('Another string',TObject(100)); 
     List.AddObject('And another string',TObject(300)); 

     //Get the integer values back 

     for i:=0 to List.Count - 1 do 
     Writeln(Integer(List.Objects[i])); 

    finally 
     //Free the list 
     List.free; 
    end; 
    except 
    on E:Exception do 
     Writeln(E.Classname, ': ', E.Message); 
    end; 

    Readln; 
end. 
+1

당신은 그것에 나를 이길이 샘플 응용 프로그램을 시도하지만 대신에 당신을 upvote에 있습니다. OP에 대한 마지막 참고 사항으로 TStringList가 내부 포인터 목록을 해제하고 개체를 만들지 않았으므로 해당 목록에 저장된 정수 만 명시 적으로 해제 할 필요가 없습니다. 이것은 RRUZ가 보여준 것이며 TSTringList 만 해제합니다. –

+0

@RRUZ - +1 와우! 나는 당신이 내가 알아 내려고 애쓰는 중요한 문제를 해결했다고 생각한다. 데이터베이스 조회 값에 ID/값 쌍을 사용하고 싶습니다. 따라서 위의 내용을 정확히 이해하면 드롭 다운에 List.Strings [i] (값 부분)을 표시하고 관련 Integer (List.Objects [i])를 데이터베이스의 ForeignKey Id로 사용할 수 있습니다. –

+0

@IElite, 정밀도와 동적 범위가 중요하지 않은 부동 소수점 값 목록을 저장하는 비슷한 방법을 사용했습니다 (Delphi '단일'형식은 4 바이트이며 포인터로 유형 변환 될 수 있음). 문자열이없고 정수/float 만 저장하려는 경우 TList를 사용할 수도 있습니다. – rossmcm

관련 문제