sábado, 6 de agosto de 2011

Controle de instância de Form Child

Saudações, pessoal! 

Grande parte dos desenvolvedores de projetos do tipo Windows Forms Application, utilizam a propriedade IsMdiContainer para criar um formulário principal. A partir deste form, é que todos os forms filhos (Child) são acionados e abertos dentro do contêiner. Um problema comum neste contexto, é que a cada clique na objeto que abre o form filho, uma nova janela é aberta na janela principal. Veja um exemplo no trecho de código abaixo em linguagem VB.NET.

Private Sub JanelaFilhaToolStripMenuItem_Click(ByVal sender As System.Object, _
                                               ByVal e As System.EventArgs) _
                                               Handles JanelaFilhaToolStripMenuItem.Click
    Dim filho As New Form2()
    filho.MdiParent = Me
    filho.Show()
End Sub




Perceba na imagem acima que a cada vez que o usuário clica no menu “Janela Filha”, um novo Form é aberto no contexto da janela principal. Para evitar que este incidente ocorra, é necessário uma pequena alteração no trecho anterior.

Dim filha As Form2
Private Sub JanelaFilhaToolStripMenuItem_Click(ByVal sender As System.Object, _
                                               ByVal e As System.EventArgs) _
                                               Handles JanelaFilhaToolStripMenuItem.Click
    If filha Is Nothing Then
        filha = New Form2()
        filha.MdiParent = Me
        filha.Show()
    Else
        filha.WindowState = FormWindowState.Normal
    End If
End Sub

Testando a aplicação, perceba que somente uma instância do formulário filho será aberta, ainda que o mesmo esteja minimizado na barra de tarefas do contêiner.
Esta é mais uma dica rápida e espero que seja útil.