En utilisant C # FormWindowState pour restaurer la hauteur?
-
20-09-2019 - |
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?
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.