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