Problemas com a váriavel Self

Delphi

15/10/2005

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

Curtidas 0

Respostas

Rogeriorock

Rogeriorock

15/10/2005

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.


GOSTEI 0
Edilcimar

Edilcimar

15/10/2005

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


GOSTEI 0
Fx|hand

Fx|hand

15/10/2005

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;



GOSTEI 0
POSTAR