Clear Objectlist
Boa noite Galera, estou com uma duvida que não consigo sanar a dias.
estou com o seguinte problema.
Tenho uma classe principal
Dentro dela está uma lista de Parcelas de uma conta a receber
a lista é a seguinte
O meu problema é quando eu chamo a procedure clear
Vejo que não está excluindo os objetos, pois o count ainda retorna a quantidade de objetos existentes.
Aqui está o clear
Quanto eu estou debugando vejo que o Self.count fica zero.
mais quando ele sai da função clear e volta para o código lContaReceber.LISTA_PARCELAS.Count ele ainda está com os objetos lá.
Alguém sabe como solucionar isso ?
Desde já agradeço
estou com o seguinte problema.
Tenho uma classe principal
TCONTAS_RECEBER = Class(TMovimentoTabelas)
Private
...
{ private declarations }
Protected
{ protected declarations }
Public
{ public declarations }
Constructor Create;
Destructor Destroy; Override;
Published
FLISTA_PARCELAS:TLISTAPARCELAS;
Property LISTA_PARCELAS:TLISTAPARCELAS Read GetLISTA_PARCELAS Write SetLISTA_PARCELAS;
End;
Dentro dela está uma lista de Parcelas de uma conta a receber
a lista é a seguinte
TLISTAPARCELAS = Class(TObjectList)
Protected
Procedure SetObject(Index:Integer; Item:TCR_ITENS);
Function GetObject(Index:Integer):TCR_ITENS;
Procedure Insert(Index:Integer; Obj:TCR_ITENS);
Public
Function Add(Obj:TCR_ITENS):Integer;
Procedure Clear; override;
Property Objects[Index:Integer]:TCR_ITENS
Read GetObject Write SetObject; Default;
Destructor Destroy; Override;
End;
O meu problema é quando eu chamo a procedure clear
lContaReceber.LISTA_PARCELAS.Clear;
Vejo que não está excluindo os objetos, pois o count ainda retorna a quantidade de objetos existentes.
Aqui está o clear
Procedure TLISTAPARCELAS.Clear;
Var
I:Integer;
oObject:TObject;
Begin
For i := (Count - 1) Downto 0 Do
Begin
oObject := TCR_ITENS(Self.Items[i]);
Self.Delete(I);
FreeAndNil(oObject);
End;
inherited Clear;
End;
Quanto eu estou debugando vejo que o Self.count fica zero.
mais quando ele sai da função clear e volta para o código lContaReceber.LISTA_PARCELAS.Count ele ainda está com os objetos lá.
Alguém sabe como solucionar isso ?
Desde já agradeço
Andre Faria
Curtidas 0
Respostas
Andre Faria
07/01/2013
Desculpem o erro da ordem ali do
Não achei uma forma de editar;
TCONTAS_RECEBER = Class(TMovimentoTabelas)
Private
FLISTA_PARCELAS:TLISTAPARCELAS;
{ private declarations }
Protected
{ protected declarations }
Public
{ public declarations }
Constructor Create;
Destructor Destroy; Override;
Published
Property LISTA_PARCELAS:TLISTAPARCELAS Read GetLISTA_PARCELAS Write SetLISTA_PARCELAS;
Não achei uma forma de editar;
GOSTEI 0
Daniel Santos
07/01/2013
Como voce ta criando a lista?
Não sei a partir de que versao do Delphi, mais tenta criar como TObjectList.Create(True) que ai ela fica responsavel pelos objetos, ou seja, matando ela ela ja limpa tudo.
Não sei a partir de que versao do Delphi, mais tenta criar como TObjectList.Create(True) que ai ela fica responsavel pelos objetos, ou seja, matando ela ela ja limpa tudo.
GOSTEI 0
Andre Faria
07/01/2013
FLISTA_PARCELAS := TLISTAPARCELAS.Create(false);
estou criando ela como false;
nesse caso teria como dar clear na lista ?
não quero destruir o objeto lista só quero limpa-lo
GOSTEI 0
Rodolpho Silva
07/01/2013
Como o amigo disse, ao criar a instância do TObjectList como False, o "dono" do objeto é o responsável por destruir o mesmo. Ao criar como TObjectList.Create(True) (o default) o dono dos objetos é o próprio TObjectList e quando você faz um "clear", ele mesmo destrói as instâncias de objetos armazenadas. Funciona em 100%.
GOSTEI 0