quinta-feira, 30 de outubro de 2008
Contornando Bug do C# Windows Forms
O Windows Forms do C#, no Visual Studio 2005, tem um "bug" que não afeta o funcionamento do programa, mas o efeito visual gerado por ele é muito feio.
Ao criar um formulário, para aplicações MDI, e definir que ele não deve apresentar o botão maximizar (MaximizeBox = false), espera-se que ele nunca apareça maximizado, porém isso nem sempre acontece.
O problema ocorre quando o aplicativo está com uma janela aberta e maximizada. Ao abrimos o segundo , não modal (janela.Show()) e com o botão maximizar desabilitado, esta última também inicia de forma maximizada. Somente depois de clicar em seu botão restaurar é que ele passa a funcionar corretamente.
Para contornar esse erro, você deve definir durante o evento "Load" desses formulários, que eles não devem retornar ao tamanho normal caso estejam maximizados.
Então, crie uma janela ancestral, para todas as suas janelas e codifique o evento Load assim:
#region Correção de Bug do VisualStudio na apresentação de janelas com botão MAXIMIZAR desabilitado
// Se o formulário está com o botão maximizar desabilitado
if (!this.MaximizeBox)
{
// E o estado atual dele é maximizado, então
if (this.WindowState == FormWindowState.Maximized)
{
// Muda o estado para normal durante o load da janela (Correção de Bug do VisualStudio)
this.WindowState = FormWindowState.Normal;
if (this.MdiParent != null)
{
this.MdiParent.Refresh();
}
else
{
this.Refresh();
}
}
}
Ao criar um formulário, para aplicações MDI, e definir que ele não deve apresentar o botão maximizar (MaximizeBox = false), espera-se que ele nunca apareça maximizado, porém isso nem sempre acontece.
O problema ocorre quando o aplicativo está com uma janela aberta e maximizada. Ao abrimos o segundo , não modal (janela.Show()) e com o botão maximizar desabilitado, esta última também inicia de forma maximizada. Somente depois de clicar em seu botão restaurar é que ele passa a funcionar corretamente.
Para contornar esse erro, você deve definir durante o evento "Load" desses formulários, que eles não devem retornar ao tamanho normal caso estejam maximizados.
Então, crie uma janela ancestral, para todas as suas janelas e codifique o evento Load assim:
#region Correção de Bug do VisualStudio na apresentação de janelas com botão MAXIMIZAR desabilitado
// Se o formulário está com o botão maximizar desabilitado
if (!this.MaximizeBox)
{
// E o estado atual dele é maximizado, então
if (this.WindowState == FormWindowState.Maximized)
{
// Muda o estado para normal durante o load da janela (Correção de Bug do VisualStudio)
this.WindowState = FormWindowState.Normal;
if (this.MdiParent != null)
{
this.MdiParent.Refresh();
}
else
{
this.Refresh();
}
}
}
Marcadores: CSharp, Desenvolvimento, Dicas, DotNet
Assinar Postagens [Atom]
Postar um comentário