Pergunta

Eu tenho um formulário que é um mdicontainer e tem uma faixa de menu no topo. Eu adiciono um formulário filho ao meu recipiente MDI e quando eu maximizar a criança maximiza sobre o MenuStrip. Eu quero saber como limitar a criança para maximizar abaixo do MenuStrip. Qualquer ajuda seria apreciada.

Foi útil?

Solução

O seu formulário filho está sendo maximizada na maneira que formulários filho é suposto ser maximizada em MDI. Não é realmente cobrindo a faixa de menu do formulário pai. - É realmente fundir sua própria faixa de menu com a do formulário pai

Para fazer o formulário filho ocupar apenas a área infantil disponíveis no pai MDI (e não fundir seu menu com o menu do pai), colocar algo como este código no evento de redimensionamento do formulário filho:

if (this.WindowState == FormWindowState.Maximized)
{
    this.WindowState = FormWindowState.Normal;
    this.Size = this.MdiParent.ClientSize;
    this.Location = new Point(0, 0);
}

o que impedirá a janela filho de ser realmente maximizada.

Eu digo "algo como este código", porque esse trecho não funciona exatamente correto. A propriedade ClientSize do formulário pai dá o tamanho total da forma, enquanto você quiser usar o tamanho de apenas a área de cliente MDI. Eu não sei como conseguir isso, e, aparentemente, não é super-fácil. Veja esta pergunta:

Tamanho / Posição do WinForms MDI Área do Cliente

Outras dicas

Você pode definir a propriedade MaximumSize para que ele não encher o recipiente inteiro.

Eu sei que esta uma questão antiga, mas eu corri para este em um projeto antigo que eu estou trabalhando, então aqui está uma resposta para qualquer um ver isso. Definir o Dock para DockStyle.Fill lhe dará o comportamento desejado.

Esteja ciente de que a janela vai agir / parecer estranho se você tentar reposicionar ou redimensionar a janela enquanto ele tem que DockStyle.

Para conseguir isso, eu inscrito em evento de redimensionamento de janela do cliente MDI e se a janela tinha acabado de ser maximizada, eu definir a sua DockStyle para preencher, defina o FormBorderStlye para FixedDialog (para evitar o redimensionamento), e definir o estado janela ao normal para evitar que a maximização ocorra.

Para evitar que o usuário mover a janela enquanto é neste "estado maximizado" Eu simplesmente anulou o método WndProc e manipulados quando a janela estava sendo movido (SC_MOVE) e colocado um retorno para impedir a ação de tomar o efeito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top