Winforms 如何恢复最小化表单
这是一个如此平凡的问题,我想我可以立即解决它,但没有。 我的表单大小和位置保存在退出时的应用程序设置中,以便下次运行应用程序时还原。如果用户在窗体最小化时关闭窗体,则无法恢复到正常状态。表单恢复为最小化状态,单击任务栏按钮不会执行任何操作。我在FormClosing事件中保存位置和大小,但如果表单最小化,我将保存最小化的大小(160,40)和位置(-32000,-32000),这对于恢复表单是完全不正确的。我想强制表单永远不要恢复到最小,而是恢复到它最后的正常大小和位置。不知何故,我必须在表单最小化并保存之前捕获大小和位置,然后在表单关闭时,如果表单最小化,则不保存大小和位置。这可能不是100%清楚,但我希望有人对此有一些见解 FormClosing处理程序:Winforms 如何恢复最小化表单,winforms,windows-7,Winforms,Windows 7,这是一个如此平凡的问题,我想我可以立即解决它,但没有。 我的表单大小和位置保存在退出时的应用程序设置中,以便下次运行应用程序时还原。如果用户在窗体最小化时关闭窗体,则无法恢复到正常状态。表单恢复为最小化状态,单击任务栏按钮不会执行任何操作。我在FormClosing事件中保存位置和大小,但如果表单最小化,我将保存最小化的大小(160,40)和位置(-32000,-32000),这对于恢复表单是完全不正确的。我想强制表单永远不要恢复到最小,而是恢复到它最后的正常大小和位置。不知何故,我必须在表单最
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
Settings.Default.WindowLocation = Location;
Settings.Default.WindowSize = Size;
Settings.Default.WindowState = WindowState;
Settings.Default.Save();
}
还原代码:
private void RestoreWindow()
{
Location = Settings.Default.WindowLocation;
if(Location.X == 0 && Location.Y == 0)
StartPosition = FormStartPosition.CenterScreen;
Size = Settings.Default.WindowSize;
WindowState = FormWindowState.Normal;
if(Size.Width > Screen.PrimaryScreen.WorkingArea.Width)
{
Location = new Point(0, Location.Y);
Size = new Size(Screen.PrimaryScreen.WorkingArea.Width, Size.Height);
}
if(Size.Height > Screen.PrimaryScreen.WorkingArea.Height)
{
Location = new Point(Location.X, 0);
Size = new Size(Size.Width, Screen.PrimaryScreen.WorkingArea.Height);
}
}
如果表单未处于正常状态,则不应保存表单的
位置
或大小
:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.WindowState == FormWindowState.Normal) {
Settings.Default.WindowLocation = Location;
Settings.Default.WindowSize = Size;
}
Settings.Default.WindowState = WindowState;
Settings.Default.Save();
}
您的恢复窗口例程没有完全意义。如果要将表单居中,为什么要保存位置?在最小化模式下启动程序可能是不可取的,在这种情况下,我会将其默认为Normal
:
private void RestoreWindow()
{
this.Location = Settings.Default.WindowLocation;
this.Size = Settings.Default.WindowSize;
// check for size or location off-screen, etc.
if ((FormWindowState)Settings.Default.WindowState == FormWindowState.Minimized)
this.WindowState = FormWindowState.Normal;
else
this.WindowState = Settings.Default.WindowState;
}
如果需要恢复窗口的上一个正常位置,则可以使用OnResizeEnd
覆盖保存设置:
protected override void OnResizeEnd(EventArgs e) {
if (this.WindowState == FormWindowState.Normal) {
Properties.Settings.Default.Location = this.Location;
Properties.Settings.Default.Size = this.Size;
}
base.OnResizeEnd(e);
}
那么您的闭幕式就是:
protected override void OnFormClosing(FormClosingEventArgs e) {
Properties.Settings.Default.WindowState = this.WindowState;
Properties.Settings.Default.Save();
base.OnFormClosing(e);
}
将窗体的大小和位置存储在窗体的本地变量中。仅当form.WindowsState属性不同于FormWindowsState.Minimized时,才分别调整事件处理程序和form.Move事件处理程序的大小。然后将大小和位置变量的内容保存在设置中的FormClosing事件处理程序中。请发布您的Form\u Closing事件处理程序代码。谢谢。也请参阅这个问题:同意保存想法。在程序第一次运行时,对中是一件笨拙的事情,可以忽略。