Question

Ok Heres mon problème. J'ai une forme que quand elle est pas agrandie, sa taille maximale doit être la hauteur totale des composants à l'intérieur du formulaire. Pour ce faire, j'utiliser ceci:

    private void resize_form(object sender, EventArgs e)
    {
        this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
    }

qui se déclenche sur l'événement Resize du formulaire. Parce que la taille des composants est toujours en train de changer, il était logique de le faire sur un événement resize. Comment jamais si je veux maximiser la forme, la forme va juste aux réglages les plus élevés définis dans this.MaximumSize. Donc, je me demandais est-il un moyen de dire quand une forme va être maximisée et mis son MaximumSize à l'écran boundarys avant que le formulaire maximise.

S'il y a une meilleure façon de changer la valeur MaximumSize sans événement resize, ce serait aussi grand:)

Était-ce utile?

La solution 2

J'ai trouvé la réponse qui me convenait parfaitement. Une commande lil WndProc: D (j'aime WndProc maintenant)

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);
    }
}

Fondamentalement, il définit this.maximize true lorsqu'il reçoit Teh message SC_MAXIMIZE. L'événement resize ne définir une nouvelle MaximumSize si this.maximize est définie sur false. Nifty xD

Autres conseils

Vous devez toujours utiliser l'événement resize, mais il faut vérifier la WindowState:

if (this.WindowState == FormWindowState.Maximized)
{
    // Do your stuff
}

Comme yshuditelu rappelle que vous pouvez définir la propriété de taille minimale de votre formulaire trop - qui devrait, lorsqu'elle est associée à une utilisation judicieuse des valeurs d'ancrage, signifie qu'il ne peut jamais se rétrécir trop loin et quand il ne pousse les composants se déplacer et / ou se développer selon les besoins.

Êtes-vous sûr que vous ne voulez pas être le réglage de la propriété MinimumSize? Si vous définissez la MinimumSize à la taille de toutes les étiquettes, la forme ne sera jamais plus petite que cela. Mais il peut encore atteindre la taille que l'utilisateur veut, tant qu'il est plus grand que le minimum.

Consultez les System.Windows.Forms. écran classe . Obtenez l'écran d'un point pertinent (pour traiter le cas multi-mon) puis obtenir sa résolution.

Cela devrait fonctionner conjointement avec les autres commentaires sur la vérification FormWindowState.Maximized.

Si l'utilisateur clique dans la barre supérieure, ils peuvent redimensionner la fenêtre, donc j'utiliser ceci:

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Normal)
    {
        this.WindowState = FormWindowState.Maximized;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top