GARANTIR DESCONTO

Fórum Fechar um form está fechado todos #613310

23/11/2020

0

Tenho 2 forms em uma aplicação Delphi. Quando abro o sistema para realizar o cadastro eu abro os dois forms, o principal e o de cadastro. O Problema vem quando eu tento fechar o form de cadastro pois ele fecha todo o sistema e não sei o que fazer... vou deixar abaixo os códigos.

Camada do form de Cadastro.

procedure TfrmPrincipal.btnClienteClick(Sender: TObject);
begin
if frmCliente = nil then
  Application.CreateForm(TfrmCliente, frmCliente);

frmCliente.Parent := frmPrincipal;
frmCliente.Show;

frmPrincipal.pnTelaPrincipal_Titulo1.Enabled := False;
frmPrincipal.pnNavegacao.Enabled             := False;
frmPrincipal.pnBaseManutencao01.Enabled      := False;
end;

Camada do form Close frmCliente.

procedure TfrmCliente.btnCloseClick(Sender: TObject);
begin
  frmPrincipal.pnTelaPrincipal_Titulo1.Enabled  := True;
  frmPrincipal.pnNavegacao.Enabled        := True;
  frmPrincipal.pnBaseManutencao01.Enabled := True;

  frmCliente.Close;

  frmPrincipal.AtualizaBotoesAdicionais;
end;

Depois que o Breackpoint passa pelo end; do btnCloseClick ele vai para o FormClose da frmPrincipal fechado todo o sistema.

procedure TfrmPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DM.qryUsoGeral.Close;
  DM.qryLocaliza.Close;

  FreeAndNil(TfrmPrincipal);
end;

Quero saber o por que disso e como reparar.
Eduardo Silva

Eduardo Silva

Responder

Post mais votado

01/12/2020

Tenho 2 forms em uma aplicação Delphi. Quando abro o sistema para realizar o cadastro eu abro os dois forms, o principal e o de cadastro. O Problema vem quando eu tento fechar o form de cadastro pois ele fecha todo o sistema e não sei o que fazer... vou deixar abaixo os códigos.

Camada do form de Cadastro.

procedure TfrmPrincipal.btnClienteClick(Sender: TObject);
begin
if frmCliente = nil then
  Application.CreateForm(TfrmCliente, frmCliente);

frmCliente.Parent := frmPrincipal;
frmCliente.Show;

frmPrincipal.pnTelaPrincipal_Titulo1.Enabled := False;
frmPrincipal.pnNavegacao.Enabled             := False;
frmPrincipal.pnBaseManutencao01.Enabled      := False;
end;

Camada do form Close frmCliente.

procedure TfrmCliente.btnCloseClick(Sender: TObject);
begin
  frmPrincipal.pnTelaPrincipal_Titulo1.Enabled  := True;
  frmPrincipal.pnNavegacao.Enabled        := True;
  frmPrincipal.pnBaseManutencao01.Enabled := True;

  frmCliente.Close;

  frmPrincipal.AtualizaBotoesAdicionais;
end;

Depois que o Breackpoint passa pelo end; do btnCloseClick ele vai para o FormClose da frmPrincipal fechado todo o sistema.

procedure TfrmPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DM.qryUsoGeral.Close;
  DM.qryLocaliza.Close;

  FreeAndNil(TfrmPrincipal);
end;

Quero saber o por que disso e como reparar.


Opa, quando eu preciso chamar outro form e consequentemente fecha-lo, eu faço assim

application.createform(TFormchamdo, FNomeFormeChamado);
try
FNomeFormeChamado.showmodal; // chama o form, lembre de estar usando a unit do form em questao
finally
destroy; // ou da pra colocar FNomeFormeChamado.close/destroy; tambem funciona mas recomendo apenas com o destroy
end;


sempre funcionou desta forma sem dar pau, so uma questão de adaptar agora, abraços

Ramboli

Ramboli
Responder

Gostei + 1

Mais Posts

01/12/2020

Ramboli

Tenho 2 forms em uma aplicação Delphi. Quando abro o sistema para realizar o cadastro eu abro os dois forms, o principal e o de cadastro. O Problema vem quando eu tento fechar o form de cadastro pois ele fecha todo o sistema e não sei o que fazer... vou deixar abaixo os códigos.

Camada do form de Cadastro.

procedure TfrmPrincipal.btnClienteClick(Sender: TObject);
begin
if frmCliente = nil then
  Application.CreateForm(TfrmCliente, frmCliente);

frmCliente.Parent := frmPrincipal;
frmCliente.Show;

frmPrincipal.pnTelaPrincipal_Titulo1.Enabled := False;
frmPrincipal.pnNavegacao.Enabled             := False;
frmPrincipal.pnBaseManutencao01.Enabled      := False;
end;

Camada do form Close frmCliente.

procedure TfrmCliente.btnCloseClick(Sender: TObject);
begin
  frmPrincipal.pnTelaPrincipal_Titulo1.Enabled  := True;
  frmPrincipal.pnNavegacao.Enabled        := True;
  frmPrincipal.pnBaseManutencao01.Enabled := True;

  frmCliente.Close;

  frmPrincipal.AtualizaBotoesAdicionais;
end;

Depois que o Breackpoint passa pelo end; do btnCloseClick ele vai para o FormClose da frmPrincipal fechado todo o sistema.

procedure TfrmPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DM.qryUsoGeral.Close;
  DM.qryLocaliza.Close;

  FreeAndNil(TfrmPrincipal);
end;

Quero saber o por que disso e como reparar.


Opa, quando eu preciso chamar outro form e consequentemente fecha-lo, eu faço assim

application.createform(TFormchamdo, FNomeFormeChamado);
try
FNomeFormeChamado.showmodal; // chama o form, lembre de estar usando a unit do form em questao
finally
destroy; // ou da pra colocar FNomeFormeChamado.close/destroy; tambem funciona mas recomendo apenas com o destroy
end;


sempre funcionou desta forma sem dar pau, so uma questão de adaptar agora, abraços



no caso o try ja faz a parte de encerrar, so colocar no evento do botão fechar um CLOSE;
Responder

Gostei + 1

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

Aceitar