Problemas com a váriavel Self
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.
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
Curtidas 0
Respostas
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
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
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
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ó !
Aki ele só vai criar o formulario se ele não existir....
ai no OnClose do FrmCadastrarProfessor vc faiz assim:
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