Domanda

Ok heres il mio problema. Ho una forma che quando non è ingrandita, la dimensione massima deve essere l'altezza totale dei componenti all'interno del modulo. Per raggiungere questo obiettivo, io uso questo:

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

che gli incendi in caso di ridimensionamento della forma. Poiché la dimensione dei componenti è in continua evoluzione aveva senso fare questo su un evento resize. Come mai se voglio ottimizzare la forma, la forma va solo per le impostazioni più alte definite in this.MaximumSize. Quindi mi chiedevo c'è un modo di dire quando un form sta per essere massimizzato e impostare la sua MaximumSize ai boundarys schermo prima che il modulo massimizza.

Se c'è un modo migliore per modificare il valore MaximumSize senza evento di ridimensionamento, che sarebbe anche bello:)

È stato utile?

Soluzione 2

Ho trovato la risposta che mi andava benissimo. Un lil WndProc di override: D (amo WndProc ora)

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

In sostanza si pone this.maximize a true quando riceve un messaggio teh SC_MAXIMIZE. L'evento di ridimensionamento sarà solo impostare un nuovo MaximumSize se this.maximize è impostato su false. Nifty xD

Altri suggerimenti

Hai ancora bisogno di utilizzare l'evento di ridimensionamento, ma controllare la WindowState:

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

Come yshuditelu sottolinea è possibile impostare la proprietà dimensione minima del modulo troppo - che dovrebbe, quando accoppiato con un uso giudizioso dei valori di ancoraggio, vuol dire che non può mai ridursi troppo lontano e quando lo fa crescere i componenti si muoveranno e / o crescere come richiesto.

Sei sicuro che non vuoi essere l'impostazione della MinimumSize proprietà? Se si imposta il MinimumSize alle dimensioni di tutte le etichette, allora la forma non sarà mai inferiore a quello. Ma può ancora crescere a qualsiasi dimensione che l'utente vuole, fintanto che è più grande di quello minimo.

Controlla le System.Windows.Forms. classe Screen. Ottenere lo schermo da un punto rilevante (per gestire il caso multi-mon) e quindi ottenere la sua risoluzione.

Questo dovrebbe funzionare in combinazione con l'altro commento sulla verifica FormWindowState.Maximized.

Se l'utente fa clic nella barra superiore, possono ridimensionare la finestra, in modo da utilizzare in questo modo:

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Normal)
    {
        this.WindowState = FormWindowState.Maximized;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top