Usando C# FormWindowState para restaurar?
-
20-09-2019 - |
Pergunta
Eu gostaria de detectar se meu aplicativo é minimizado em determinadas situações e, se for, a janela precisa ser restaurada. Eu posso fazer isso facilmente da seguinte maneira:
if(this.WindowState == FormWindowState.Minimized) {
this.WindowState = FormWindowState.Normal;
}
No entanto, o que acontece se o usuário maximizar o formulário primeiro e minimizá -lo? Eu não sei se devo definir o WindowState
para FormWindowState.Normal
ou FormWindowState.Maximized
. Existe um método ou chamada de API que eu possa verificar para resolver esse problema?
Solução
O código mostrado abaixo faz o que você precisa. Substituir a escolha do usuário é bastante imprudente.
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;
}
}
}
Outras dicas
Eu uso esta solução para restaurar as formas em forma de MDI. Primeiro você tem que definir:
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
private const int SW_RESTORE = 9;
E quando se trata de restaurar:
ShowWindowAsync(this.MdiChildren[i].Handle, this.SW_RESTORE);
Isso restaurará o formulário para o estado anterior sem usar titulares de estado adicionais. Também você pode encontrar isto artigo interessante
Eu acho que você deve ser capaz de ligar this.Show()
e restaurará o estado anterior (visível).
Aqui está uma abordagem que utiliza o Método OnResize da forma
https://stackoverflow.com/a/6837421/578731:
Não tenho certeza se isso funcionará para todos, mas eu encontrei isso hoje e alguém na equipe sugeriu "você tentou Normal"?
Acontece que ele estava certo. O seguinte parece restaurar muito bem sua janela:
if (myWindow.WindowState == WindowState.Minimized) myWindow.WindowState = WindowState.Normal;
Isso funciona bem, restaurando a janela para maximizar, se necessário. Parece fundamental verificar o estado minimizado primeiro como chamado Windowstate.normal Uma segunda vez "restaurará" sua janela para o estado não maximizado.
Espero que isto ajude.