GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[RESOLVIDO] Abrir um Form fechando o outro C#

#1

Estou aprendendo algumas coisas no windows forms por conta e estou com a seguinte questão:
Tenho um formulário principal (Form1) que contém uma caixa de texto e botão. Ao clicar nesse botão, gostaria que ele abrisse outro form (Form2) e exibisse o texto.
Essa parte está ok. Funciona. Porém, quando ele abre o Form2, abre em uma nova janela, então ficam duas abertas, uma com cada Form. É possível abrir na mesma? E se sim, eu “perco” informações inseridas no primeiro Form?

Dentro do botão que chama meu Form2, está assim:

private void Button1_Click(object sender, EventArgs e)
{
    var form = new Form2();
    form.Show();
}

Já tentei “form.ShowDialog()” também e o resultado é o mesmo.

0 Likes

#2

Para você abrir o outro formulário no mesmo formulário, você deve definir este teu formulário(Form1) como formulário pai(Propriedades MdiParent) e então, quando chamar, setar que o seu "Form2 é um formulário filho.
Exemplo:
Para definir o Formulário 1 como pai, vá na propriedade “MdiParent” e deixe setado true.
Ao habilitar o modo MdiParent, o seu formulário ficará cinza e as cores/imagens definidas como background, não serão visíveis.(É possível alterar isto via código em tempo de execução no evento Load do mesmo…)

Agora na hora de chamar o formulário 2, faça da seguinte maneira.


var form = new Form();
form.MdiParent = meuForm1;
form.Show();

Obs.: Quando for exibir um formulário filho e chamar com a propriedade ShowDialog();, a aplicação dará uma exceção e vai parar a sua aplicação. Por isto use o evento Show();
Pronto, agora o seu formulário dois, vai abrir dentro do formulário um.



Para você abrir o outro formulário e fechar o anterior, você vai perder as informações do anterior.
Para fechar o formulário, pode usar o form.Close();. Porém, se o formulário um neste caso, for o seu formulário principal da aplicação(oque está configurado para inicializar a aplicação), quando ele fechar, toda a sua aplicação será fechada junto. Então neste caso, poderá utilizar o form.Hide();. Que neste caso, ele vai “esconder” na memória e vai continuar a executar as linhas de códigos abaixo normalmente sem encerrar a sua aplicação.
Exemplo abaixo:

var form2 = new Form2();
this.Hide();//vai “esconder” o formulário atual
form2.show();
ou form2.ShowDialog();.
Lembrando que para o exemplo acima, não tem a necessidade de abrir no mesmo formulário, desative a propriedade MdiParent, setando ela como false

Para você passar informação de um formulário para o outro, um exemplo é você utilizar variáveis.

Em relação “esconder” um formulário na memória, existe boas práticas que poderá executar em sua aplicação para limpar estes formulários da memória.

0 Likes

#3

Olá, @Lucaslemuel.
Muito obrigada pela resposta, funcionou como eu queria.

1 Like