Saving the form’s position and restoring it on startup is a simple process when using the Settings functionality that’s saved with each user of your application.

Create a few settings in your Settings tab for the project and set them as User scope. Use the below picture as your guide:

Settings

Settings

In the form you want to save add the following text to your FormClosing, and Load events:

private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.WindowState != FormWindowState.Minimized)
    {
        Properties.Settings.Default.MainForm_WindowState = this.WindowState;
        Properties.Settings.Default.MainForm_Location = this.Location;
        Properties.Settings.Default.MainForm_Size = this.Size;
    }
    Properties.Settings.Default.Save();
}

private void MainForm_Load(object sender, EventArgs e)
{
    if (Properties.Settings.Default.MainForm_WindowState == FormWindowState.Maximized)
    {
        this.WindowState = FormWindowState.Maximized;
    }
    else
    {
        this.WindowState = Properties.Settings.Default.MainForm_WindowState;
        this.Location = Properties.Settings.Default.MainForm_Location;
        if (Properties.Settings.Default.MainForm_Size.IsEmpty)
        {
            this.Width = Screen.GetWorkingArea(this).Width - 200;
            this.Height = Screen.GetWorkingArea(this).Height - 100;
        }
        else
       {
           this.Size = Properties.Settings.Default.MainForm_Size;
       }
       if (this.Top < 0)
           this.Top = 0;
   }
}

You'll notice that we're checking to only save when not minimized. We're also ensuring that the form is within view and is not somehow off the sceeen.