Erro ao tentar um manipular um objeto de outro form

Delphi

07/11/2017

toda vez que, do form 2 eu tento manipular um objeto no form 1 (seja panel, labels edits, ou grids)
da um erro de acesso.
alguem sabe porque e como resolver?
Henrique Dias

Henrique Dias

Curtidas 0

Melhor post

Henrique Dias

Henrique Dias

08/11/2017

ola amigo, eu achei mais ou menos o porque do erro:
a manipulação ocorre com sucesso desde que ela inicialize junto com a aplicação,
ou seja la no menu project - options o form deve estar no lado "auto-create forms".

porem meu form com os objetos a serem manipulados esta no lado "avaliable-forms
e eu chamo esse form daquela maneira mais simples:

var
form1: Tform1;
begin
form1:=tform1.create(self);
form.showmodal;
end;


depois de criado se eu tentar manipular qualquer objeto desse form a partir de outro formulário , a fuction chamada para manipular os objetos, tem os objetos perdidos, e da um erro acecss violation.
GOSTEI 1

Mais Respostas

Luiz Vichiatto

Luiz Vichiatto

07/11/2017

Você colocou a unit na linha do uses do form1 a form2?
A declaração da procedure está declarada no private por acaso?
poste o código que está chamando
GOSTEI 0
Henrique Dias

Henrique Dias

07/11/2017

uses declarada, e é um função, declarada no public
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

07/11/2017

Para acessar um objeto ele deve está na memória (criado/instanciado), caso contrário, dará este erro de violação de acesso a memória.

Para o seu caso, vejo 2 soluções.

1 - Deixar este form que você quer acessar de outro form, com a opção "avaliable-forms" (menu project - options).
2 - Criar este form com Show (ao invés de ShowModal), antes de tentar manipulá-lo.
GOSTEI 1
Henrique Dias

Henrique Dias

07/11/2017

a primeira opção é sucesso,
mas a segunda o erro persiste
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

07/11/2017

Talvez a segunda opção não funcione porque ao fechar o form que você quer acessar você deve estar destruindo ele.

Para funcionar você não pode destruí-lo ao fechá-lo. Destrua ele apenas quando não for mais utilizar/acessar.
GOSTEI 0
Henrique Dias

Henrique Dias

07/11/2017

ola
então a situação e a seguinte: (aplicativo de controle de renda)
1° tela de login (de la chama a tela principal do aplicativo)
2°aplicativo aberto (o form 1 do exemplo, onde ha os objetos a serem manipulado)
3° vou fazer uma add de uma despesa e abro um 3° formulario (form 2)
4° preencho os dados e clico no botao que fará a gravação dos dado no BD e apos que chamara a função que sera responsável pela manipulação dos dados

neste ponto, a 2 forma sugerido por vc gera um erro de acesso
como pode ver o form 1 continua aberto, porem o foco esta no form 2 que chamou a função
tentei inúmeras formas e todas fracaças

porem a primeira forma funciona normalmete :
simplismente declarei a unit onde esta a função no uses e faço a chamada no fim da linha de codigo do botao

nao sei o porque do erro, mas refazendo um codigo paralelo ao que eu trabalhava notei essa diferença. assim escolhi uma alternatica,
nao é bem o que eu queria mas e o que no momento estou tento que optar como solução
GOSTEI 0
POSTAR