Fórum Problemas com a váriavel Self #299580
15/10/2005
0
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
Curtir tópico
+ 0Posts
15/10/2005
Rogeriorock
Gostei + 0
16/10/2005
Edilcimar
FormX.Show;
este código cria o form se ele não existir, quando ele existe ele não faz nada
Gostei + 0
16/10/2005
Fx|hand
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
Clique aqui para fazer login e interagir na Comunidade :)