Formulários : Conceitos básicos II

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
       f2.Show()
   End
Sub

- 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:

  1. Altere a propriedade ControlBox do formulário form2.vb para False (assim o usuário não pode fechá-lo clicando no X da barra de titúlos)
  2. Inclua um botão de comando - button2 - no formulário e nele insira o seguinte código:
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
   Me
.Hide()

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:


José Carlos Macoratti