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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top