C# WinForm 如何保存窗口的状态
软件中通常会有一种保存窗口状态的功能,即打开程序时,窗口出现在上次关闭的位置,窗口大小与关闭前一样。
实现这个功能需要保存三个变量:位置、大小、以及窗口状态。
public class FormState
{
public Point Location;
public Size Size;
public FormWindowState WindowState;
}
位置大小不必多说,窗口状态表示窗口处于正常状态、最大化、还是最小化。实际使用中,我们不希望用户打开程序后,窗口处于最小化状态,所以只需要保存是否处于最大化状态即可。
如果我们在窗口关闭时,直接保存窗口的 Location 和 Size 属性,看似成功了,但会带来一个问题:如果我们关闭窗口时,窗口正处于最大化状态,下次打开窗口后,窗口从最大化恢复正常时,尺寸并不会缩小到原来的状态。这是因为我们没有保存窗口恢复正常时应恢复的尺寸,这时应该保存 RestoreBounds 变量。
代码如下:
private void SaveFormState()
{
if (WindowState == FormWindowState.Maximized)
{
formState.Location = RestoreBounds.Location;
formState.Size = RestoreBounds.Size;
formState.WindowState = FormWindowState.Maximized;
}
else if (WindowState == FormWindowState.Normal)
{
formState.Location = Location;
formState.Size = Size;
formState.WindowState = FormWindowState.Normal;
}
else
{
formState.Location = RestoreBounds.Location;
formState.Size = RestoreBounds.Size;
formState.WindowState = FormWindowState.Normal;
}
formState.Save()
}