Question

Je voudrais détecter si ma demande est réduite au minimum dans certaines situations, et si elle est, la fenêtre doit être restauré. Je peux le faire facilement comme suit:

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

Cependant, ce qui se passe si l'utilisateur maximise d'abord la forme, puis il réduit? Je ne sais pas si vous souhaitez définir le WindowState à FormWindowState.Normal ou FormWindowState.Maximized. Y at-il une méthode ou un appel API je peux vérifier pour résoudre ce problème?

Était-ce utile?

La solution

Le code ci-dessous fait ce que vous avez besoin. Outrepasser le choix de l'utilisateur est assez imprudent 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;
        }
    }
}

Autres conseils

J'utilise cette solution pour restaurer les formes sous forme MDI. D'abord, vous devez définir:

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

private const int SW_RESTORE = 9;

et quand il s'agit de la restauration:

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

Ceci restaurera forme à l'état précédent sans utiliser les détenteurs d'Etat supplémentaires. vous pouvez également trouver cet article intéressant

Je pense que vous devriez être en mesure d'appeler this.Show() et RETABLIT à l'état précédent (visible).

Voici une approche qui utilise la méthode OnResize du formulaire

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

  

Je ne sais pas cela fonctionnera pour tout le monde, mais je suis tombé aujourd'hui et quelqu'un sur la l'équipe a suggéré " avez-vous essayé normal "?

     

Il s'avère qu'il avait raison. Ce qui suit semble bien restaurer votre fenêtre:

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

Cela fonctionne très bien, la restauration de la fenêtre maximisée si nécessaire. Il semble indispensable de vérifier le premier état réduit en appelant WindowState.Normal une deuxième fois « restaurer » la fenêtre de sa non-maximisée état.

     

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top