Terça-feira, 24 de Junho de 2008

 

Abrir apenas uma instância de uma janela MDI em WindowsForms - C#

Durante a implantação de um sistema verificamos que algumas pessoas se confundem com a abertura de janelas MDI.
Assim, após abrir uma janela e efetuar o cadastramento de alguma informação, minimizam o formulário e começam a realizar alguma outra tarefa.
Depois de um tempo, ao invés de retornar para a tela minimizada, acessam o item de menu e abrem outra instância da mesma janela. Assim, acabam se confundindo quando restauram a primeira janela minimizada e se deparam com dados desatualizados.
Para evitar esse problema, devemos restaurar a janela minimizada, ao invés de abrir uma nova instância dela.
A codificação consiste em verificar se o formulário já está na lista de janelas MdiChildren da janela principal e reativá-lo caso ele seja encontrado.
Portanto, a codificação do evento Click de um item de menu (da janela principal) ficaria o seguinte:

private void imenuInclusaoTeste_Click(object sender, EventArgs e)
{
    try
    {
        // Localiza o formulario
        foreach (Form form in this.MdiChildren)
        {
            if (form is
JanCadastroTeste)
            {
                // Torna-o ativo
                form.WindowState = FormWindowState.Normal;
                form.Activate();
                return;
            }
        }
        // Senão, abre uma instancia da janela
        JanCadastroTeste janCadastro = new JanCadastroTeste();
        janCadastro.MdiParent = this;
        janCadastro.Show();
    }
    catch (Exception exception)
    {
        // Tratamento do Erro ...
    }
}

Referências:

Single Instance Children Forms in MDI Applications

Introduction to MDI Forms with C#

Marcadores: , , ,


Comentários: Postar um comentário



Links para esta postagem:

Criar um link



<< Início

Add to Technorati Favorites Adicionar aos Favoritos BlogBlogs

Assinar Postagens [Atom]