これは非常にありふれた問題なので、すぐに修正できると思っていましたが、違います。フォームのサイズと場所は、次回アプリを実行したときに復元するために、終了時にアプリの設定に保存されます。最小化されているときにユーザーがフォームを閉じると、通常の状態に戻すのに問題が発生します。フォームは最小化された状態に戻り、タスクバー ボタンをクリックしても何も起こりません。FormClosing イベントで場所とサイズを保存しますが、フォームが最小化されている場合は、最小化されたサイズ (160、40) と場所 (-32000、-32000) を保存していますが、これはフォームを復元するにはまったく不適切です。フォームが最小化されないように強制したいのですが、最後の通常のサイズと場所に戻ります。どういうわけか、フォームを最小化して保存する前にサイズと場所をキャプチャする必要があり、フォームが最小化されている場合は FormClosing でサイズと場所を保存しません。これはおそらく 100% 明らかではありませんが、
FormClosing ハンドラ:
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);
}
}