Использование C # FormWindowState для восстановления? - PullRequest
1 голос
/ 11 января 2010

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

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

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

Ответы [ 5 ]

2 голосов
/ 07 мая 2011

Я использую это решение для восстановления форм в форме 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);

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

2 голосов
/ 11 января 2010

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

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;
        }
    }
}
1 голос
/ 11 января 2010

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

0 голосов
/ 10 декабря 2012

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

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

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

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

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

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

0 голосов
/ 11 января 2010

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

...