Domanda

Mi piacerebbe rilevare se la mia domanda è ridotto al minimo, in determinate situazioni, e se lo è, la finestra deve essere ripristinato. Posso farlo facilmente nel seguente modo:

if(this.WindowState == FormWindowState.Minimized) {
    this.WindowState = FormWindowState.Normal;
}

Tuttavia, cosa succede se l'utente massimizza prima la forma, quindi minimizza esso? Non so se impostare il WindowState a FormWindowState.Normal o FormWindowState.Maximized. C'è una chiamata di metodo o di API che posso controllare per risolvere questo problema?

È stato utile?

Soluzione

Il codice riportato di seguito fa quello che ti serve. Override scelta dell'utente è abbastanza saggio btw.

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        mLastState = this.WindowState;
    }
    FormWindowState mLastState;
    protected override void OnResize(EventArgs e) {
        base.OnResize(e);
        if (mLastState != this.WindowState) {
            if (this.WindowState == FormWindowState.Minimized) this.WindowState = mLastState;
            else mLastState = this.WindowState;
        }
    }
}

Altri suggerimenti

Io uso questa soluzione per ripristinare le forme in forma MDI. In primo luogo è necessario definire:

[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

private const int SW_RESTORE = 9;

e quando si tratta di ripristinare:

ShowWindowAsync(this.MdiChildren[i].Handle, this.SW_RESTORE);

Questo ripristinerà modulo allo stato precedente senza l'utilizzo di supporti statali aggiuntivi. Inoltre si possono trovare questo articolo interessante

Credo che si dovrebbe essere in grado di chiamare this.Show() e sarà ripristinare lo stato precedente (visibile).

Ecco un approccio che utilizza il OnResize metodo della forma

https://stackoverflow.com/a/6837421/578731 :

  

Non è sicuro questo lavoro per tutti, ma mi sono imbattuto in questo oggi e qualcuno sulla squadra ha suggerito " avete provato Normal "?

     

Si scopre che aveva ragione. Quanto segue sembra per ripristinare bene la finestra:

if (myWindow.WindowState == WindowState.Minimized)
    myWindow.WindowState = WindowState.Normal;
     

Questo funziona bene, ripristinando la finestra per massimizzata, se necessario. Sembra indispensabile verificare lo stato minimizzato prima come chiamare WindowState.Normal una seconda volta "ripristinare" la finestra al suo stato non ingrandita.

     

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top