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.
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.
Olá, @Lucaslemuel.
Muito obrigada pela resposta, funcionou como eu queria.
1 curtida