C # dizer se Form é maximizar
Pergunta
Ok heres meu problema. I tem uma forma que, quando não é maximizado, o seu tamanho máximo tem que ser a altura total dos componentes no interior da forma. Para conseguir isso, eu uso isso:
private void resize_form(object sender, EventArgs e)
{
this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
}
que dispara sobre o evento Resize do formulário. Porque o tamanho do componente está sempre mudando fazia sentido fazer isso em um evento de redimensionamento. Como sempre, se eu quero maximizar o formulário, o formulário só vai para as mais altas configurações definidas no this.MaximumSize. Então eu queria saber se existe uma maneira de dizer quando um formulário vai ser maximizado e defina seu MaximumSize aos boundarys tela antes que o maximiza formulário.
Se houver uma maneira melhor para alterar o valor MaximumSize sem evento de redimensionamento, que também seria ótimo:)
Solução 2
Eu encontrei a resposta que me serviu perfeitamente. Um lil WndProc override: D (eu amo WndProc agora)
protected override void WndProc(ref Message message)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_MAXIMIZE = 0xF030;
switch (message.Msg)
{
case WM_SYSCOMMAND:
int command = message.WParam.ToInt32() & 0xfff0;
if (command == SC_MAXIMIZE)
{
this.maximize = true;
this.MaximumSize = new System.Drawing.Size(0, 0);
}
break;
}
base.WndProc(ref message);
}
private void resize_form(object sender, EventArgs e)
{
if (!maximize)
{
this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
}
}
Basicamente ele define this.maximize a verdade quando se recebe teh mensagem SC_MAXIMIZE. O evento de redimensionamento só irá definir um novo MaximumSize se this.maximize é definida como falsa. Nifty xD
Outras dicas
Você ainda precisa usar o evento de redimensionamento, mas verificar o WindowState
:
if (this.WindowState == FormWindowState.Maximized)
{
// Do your stuff
}
Como yshuditelu pontos fora, você pode definir a propriedade de tamanho mínimo do seu formulário também - que deveria, quando combinada com o uso criterioso de valores âncora, significa que ele nunca pode encolher muito longe e quando o faz crescer os componentes irá mover e / ou crescer conforme necessário.
Você tem certeza que não quer ser definindo o MinimumSize propriedade? Se você definir o MinimumSize para o tamanho de todos os rótulos, em seguida, a forma nunca será menor que isso. Mas ainda pode crescer para o tamanho que o usuário quer, contanto que ele é maior do que o mínimo.
Confira os System.Windows.Forms. classe Screen . Obter a tela de um ponto relevante (para lidar com o caso multi-mon) e, em seguida, obter a sua resolução.
Isso deve funcionar em conjunto com o outro comentário sobre a verificação FormWindowState.Maximized.
Se o usuário clicar na barra superior, que pode redimensionar a janela, então eu uso isso:
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Maximized;
}
}