爱折腾的孩纸

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()
}

评论