Este artigo é uma continuação do artigo - Formulários : Conceitos Básicos - nele vamos mostrar mais algumas das novas características dos formulários no VB .NEt e como trabalhar com elas.
Exibindo um segundo formulário
Vamos partir do princípio de temos um projeto com dois formulários : form1.vb e form2.vb.
O form1.vb será o formulário que será carregado e exibido quando nossa aplicação rodar. Nele temos um botão de comando - button1 - que quando for clicado irá exibir o formulário - form2.vb.
O código associado ao evento click do botão de comando - button1 - para exibir o formulário form2 pode ser o seguinte:
Private
Sub
Button1_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
Button1.Click
Dim f2 As New Form2() f2.Show() End Sub |
- Embora o código realmente exiba o formulário form2.vb quando clicado , ele permite que diversas instâncias do formulário sejam abertas toda vez que o usuário clicar no botão. |
Uma maneira de resolver o problema e abrir o formulário form2.vb na forma modal , desta forma o foco estará no formulário até que ele seja fechado. Abaixo temos o código que faz exatamente isto:
Private
Sub
Button1_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
Button1.Click
Dim f2 As New Form2() f2.ShowDialog(Me) End Sub |
Atenção !!! você pode ficar tentado a permitir que somente uma instância do formulário form2.vb seja exibida usando o seguinte código:
Dim f2
As New Form2()
Private
Sub
Button1_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
Button1.Click |
- Isto realmente funciona na primeira vez que o formulário form1.vb for carregado ; mas se você fechar o form2.vb e clicar no botão de comando novamente vai obter um erro pois o formulário form2.vb só foi instanciado quando o formulário form1.vb foi carregado e ao fechar o form2.vb ele passa a não existir mais. |
Para poder usar o código acima não podemos fechar o formulário form2.vb ; então que tal escondê-lo ??? Sim , se você esconder o formulário ele ainda vai continuar na memória . Vamos fazer os seguintes ajustes no formulário:
Private
Sub
Button1_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
Button1.Click Me.Hide() End Sub |
|
Pronto !! agora o erro não vai mais ocorrer pois o formulário está disponível na memória para ser exibido. Tudo certo então ???
Não , se você precisar que o usuário tenha acesso aos botões Minimizar e Maximizar não vai poder desabilitar a ControlBox. E ai ???
Elementar meu caro Watson , ative a ControlBox e no evento Closing (disparado quando o usuário clicar no botão X para fechar o formulário) do formulário insira o seguinte código :
Private
Sub
Form2_Closing(ByVal
sender As
Object,
ByVal e
As System.ComponentModel.CancelEventArgs)
Handles
MyBase.Closing
e.Cancel =
True End Sub |
Este código cancela o fechamento( e.Cancel = True ) do formulário e apenas o esconde(Me.Hide() ).
E agora tudo certo ??? Quase ....
Neste projeto o formulário form1.vb é o formulário inicial da aplicação ; se o formulário form2.vb estiver carregado e exibido quando você fechar o formulário form1.vb ele vai fechar o formulário form2.vb automaticamente. Mas , se o formulário form1.vb não for o formulário inicial isto não vai ocorrer , ele vai continuar carregado mesmo que você feche o formulário form1.vb.
Se você quiser fechar o formulário form2.vb sempre que o formulário form1.vb for encerrado (se ele não for o formulário inicial) então basta incluir o seguinte código no evento Closing do formulário form1.vb:
Private
Sub
Form1_Closing(ByVal
sender As
Object,
ByVal e
As System.ComponentModel.CancelEventArgs)
Handles
MyBase.Closing If Not IsNothing(f2) Or Not f2.IsDisposed Then f2.Close() End Sub |
Aguarde mais dicas sobre formulários no VB .NET ...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB .NET - Passando valores entre formulários - Macoratti.net