Frage

Ok, hier ist mein Problem.Ich habe ein Formular, dessen maximale Größe, wenn es nicht maximiert ist, der Gesamthöhe der Komponenten innerhalb des Formulars entsprechen muss.Um dies zu erreichen, verwende ich Folgendes:

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

Das wird beim Resize-Ereignis des Formulars ausgelöst.Da sich die Komponentengröße ständig ändert, war es sinnvoll, dies bei einem Größenänderungsereignis zu tun.Wenn ich jedoch das Formular maximieren möchte, verwendet das Formular einfach die höchsten Einstellungen, die in this.MaximumSize definiert sind.Ich habe mich also gefragt, ob es eine Möglichkeit gibt, festzustellen, wann ein Formular maximiert wird, und seine maximale Größe auf die Bildschirmgrenzen festzulegen, bevor das Formular maximiert wird.

Wenn es eine bessere Möglichkeit gibt, den Maximumsize-Wert ohne Größenänderungsereignis zu ändern, wäre das auch großartig :)

War es hilfreich?

Lösung 2

Ich habe die Antwort gefunden, die perfekt zu mir passte.Eine kleine WndProc-Überschreibung :D (ich liebe WndProc jetzt)

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

Grundsätzlich wird this.maximize auf true gesetzt, wenn die SC_MAXIMIZE-Nachricht empfangen wird.Das Resize-Ereignis legt nur dann eine neue MaximumSize fest, wenn this.maximize auf false gesetzt ist.Raffiniert xD

Andere Tipps

Sie müssen noch das Resize-Ereignis verwenden, aber überprüfen Sie die WindowState:

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

Wie yshuditelu weist darauf hin, Sie die Mindestgröße Eigenschaft des Formulars setzen können - was sollte, wenn sie mit gezieltem Einsatz von Anker Werten bedeuten, dass es nie zu weit schrumpfen kann, und wenn es die Komponenten wächst bewegen und / oder wachsen je nach Bedarf.

Sind Sie sicher, dass Sie nicht den MinimumSize- Eigentum? Wenn Sie die MinimumSize- auf die Größe aller Etiketten-Set, dann wird die Form nie als kleiner sein. Aber es kann immer noch wachsen, was Größe der Nutzer will, solange er größer ist als das Minimum.

Schauen Sie sich die System.Windows.Forms. Bildschirm Klasse. Holen Sie den Bildschirm von einem relevanten Punkt (zu handhaben die Multi-mon Fall) und dann seine Auflösung.

Dies sollte über Prüfung FormWindowState.Maximized in Verbindung mit dem anderen Kommentar arbeiten.

Wenn der Benutzer in der oberen Leiste klickt, können sie die Größe des Fensters, so dass ich diese:

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Normal)
    {
        this.WindowState = FormWindowState.Maximized;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top