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

Andei procurando uma solução pra este "problema" por muito tempo --(algumas horas... viva o Google!, hehehe)--.

Achei muito material a respeito e muita coisa realmente funcionou, mas seu código é realmente limpo, claro e eficiente, parabéns e obrigado por divulgar seu conhecimento.

Grande abraço!
 
Valeu pelo comentário Luis Fernando... é bom saber que te ajudei.
 
Parabéns!

Você não imagina a dor de cabeça que essa situação de abrir vários mdichildren do mesmo form estava me causando.

Excelente post.

Um grande abraço.

Igor Battisti Bernardes
<"igorbattisti@yahoo.com.br">
 
Parabens, muito bom.. Ajudou demaiss. Abraços.
 
funcionou muito bem. Valeu obrigado. Abraço.
 

Postar um comentário

Assinar Postar comentários [Atom]





<< Página inicial

Add to Technorati Favorites Adicionar aos Favoritos BlogBlogs diHITT

Assinar Postagens [Atom]