Использование C# FormWindowState для восстановления?
-
20-09-2019 - |
Вопрос
Я хотел бы определить, сворачивается ли мое приложение в определенных ситуациях, и если да, то окно необходимо восстановить.Я могу сделать это легко следующим образом:
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 второй раз «восстановит» ваше окно в не развернутое состояние.
Надеюсь это поможет.