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:
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: CSharp, Desenvolvimento, Dicas, Visual Studio
Comentários:
<< Página inicial
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!
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!
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">
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">
Assinar Postar comentários [Atom]
<< Página inicial
Assinar Postagens [Atom]
Postar um comentário