Fórum Problemas com a váriavel Self #299580

15/10/2005

0

Estou com um sério problema:

To fazendo um programa orientado a objetos e então eu tenho uma classe de controle no projeto que realiza a seguinte função quando na tela principal, eu clico no menu Cadastrar Professor.(Obs: o frmCadastroProfessor está declarado na classe TControleAplicacao)

procedure TControleAplicacao.CadastrarProfessor;
begin
frmCadastrarProfessor.MostrarTelaCadastroProfessor;
end;

E então o MostrarTelaCadastroProfessor faz o seguinte:

procedure TfrmCadastroProfessor.MostrarTelaCadastroProfessor;
begin
if Self = nil then
Self:= TfrmCadastroProfessor.Create(Self);
Self.Show;
end;

Então aí vem o problema: depois que o frmCadastroProfessor é mostrado com um show, se eu clico no menu Cadastrar Professor, ele substitui o form criado anteriormente. E isso não poderia ocorrer pois faço a verificação para ver se ja foi criado na procedure MostrarTelaCadastroProfessor.

Fiz um watch e vi que quando o form esconde ao clicar no form principal e depois ao clicar no menu Cadastrar Professor a váriavel self recebe nil. Não sei o que está acontecendo pois se eu declarar o frm como váriavel global na unit do form e substituir o Self por frmCadastroProfessor esse problema não acontece.

O q poderia estar acontecendo?

Gostaria q alguém resolvesse o meu problema.


Bhvivarelli

Bhvivarelli

Responder

Posts

15/10/2005

Rogeriorock

Este seu codio não deveria funcionar nunca pq self e o proprio objeto e se ele esta rodando para testar ele mesmo ele nunca poderia estar nil.


Responder

Gostei + 0

16/10/2005

Edilcimar

FormX := TFormX.Create(Self);
FormX.Show;
este código cria o form se ele não existir, quando ele existe ele não faz nada


Responder

Gostei + 0

16/10/2005

Fx|hand

não intendi mto bemm... mais ai....

eu tentaria fazer assim, sempre fiz, e sempre deu certo....
se vc kiser tentar jah deixei o codigo pronto pra vc pegar...
saca só !


procedure TControleAplicacao.CadastrarProfessor; 
begin 
if FrmCadastrarProfessor = Nil then
Application.CreateForm(TFrmCadastrarProfessor, FrmCadastrarProfessor);
end; 


Aki ele só vai criar o formulario se ele não existir....

ai no OnClose do FrmCadastrarProfessor vc faiz assim:

procedure TFrmCadastrarProfessor.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := cafree;
FrmCadastrarProfessor := nil;
end;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar