Вопрос

Я хотел бы определить, сворачивается ли мое приложение в определенных ситуациях, и если да, то окно необходимо восстановить.Я могу сделать это легко следующим образом:

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

Однако что произойдет, если пользователь сначала развернет форму, а затем свернет ее?Я не знаю, стоит ли устанавливать WindowState к FormWindowState.Normal или FormWindowState.Maximized.Есть ли метод или вызов API, который я могу проверить, чтобы решить эту проблему?

Это было полезно?

Решение

Код, показанный ниже, делает то, что вам нужно.Кстати, переопределять выбор пользователя довольно неразумно.

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;
        }
    }
}

Другие советы

Я использую это решение для восстановления форм в форме MDI.Сначала вам нужно определить:

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

private const int SW_RESTORE = 9;

и когда дело доходит до восстановления:

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

Это вернет форму в предыдущее состояние без использования дополнительных держателей состояний.Также вы можете найти этот статья интересная

Я думаю, ты сможешь позвонить this.Show() и он вернется в предыдущее (видимое) состояние.

Вот подход, который использует Метод OnResize формы

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

Не уверен, что это подойдет всем, но сегодня я столкнулся с этим и кто-то в команде предложил"попытался ли ты Нормальный"?

Оказывается, он был прав.Кажется, что следующее хорошо восстанавливает ваше окно:

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

Это работает отлично, при необходимости восстанавливая окно в развернутом виде.Кажется, важно сначала проверить свернутое состояние при вызове WindowState.Normal второй раз «восстановит» ваше окно в не развернутое состояние.

Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top