single.php

C#でイメージビューアーアプリを作ってみる(その六)フォームの表示位置を保存する

Windows10/11にはイメージビューアー「フォト」アプリがありますが。使い勝手が悪い部分もあるので、自己満足的なイメージビューアーを作ってみました。今回は起動時のフォームの場所とサイズを先回終了時の状態に復元する機能を追加しました。

前の記事はこちら

アプリケーション設定で保存

Windowsの場合、以前はレジストリなどに保存しておくのが一般的でした。現在ではアプリケーション設定(プロジェクト毎にユーザーフォルダーに保存されるテキストファイル)に保存されるようになっています。

まずは、アプリケーション設定の項目を追加します。[ソリューション エクスプローラー]を表示して、ソリューション(プロジェクト)内に[Properties]項目を探します。無い場合には、プロジェクト名を右クリックして表示されたポップアップメニューから[プロパティ]を選択します。

表示された画面で[設定|全般]をクリックして[設定]画面で[アプリケーション設定を作成する/開く]をクリックします。

アプリケーションの設定画面が作成され、新しいタブで表示されます。

アプリケーション設定の追加

まず、ウィンドウの状態(最大化や最小化など)を保存する項目を追加していきます。公式ヘルプには、[参照]で任意の変数型が選べるという記載がありますが、私の画面では見つからなかったので int 型で追加を行いました。名前は[MainFormState]に設定しました。

これで、アプリケーション設定にint型のデータを保存する項目が追加されました。

データの保存と読み込み用に[FormClosing]と[Load]イベントを追加します。

追加された、それぞれのイベントに次のコードを追加します。フォームを閉じる前に[WindowState]の値をアプリケーション設定の[MainFormState]に設定して保存して、フォームを開く前にアプリケーション設定から[WindowState]に設定するという流れになっています。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
  Properties.Settings.Default.MainFormState = (int)this.WindowState;

  Properties.Settings.Default.Save();

}
private void Form1_Load(object sender, EventArgs e)
{
  this.WindowState = (System.Windows.Forms.FormWindowState)Properties.Settings.Default.MainFormState;
}

実行するとフォームの終了時の状態(最大化や最小化)がアプリケーション起動時に引き継がれるようになります。

同様にフォームの位置とサイズを保存できるようにアプリケーション設定に追加を行います。Size型やPoint型があれば便利なんですが、選択できないので今回もint型を追加します。

コードも[WindowState]と同じで[FormClosing]と[Load]イベントに追加します。

int型で保存するように、各プロパティをキャストしています。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
  Properties.Settings.Default.MainFormState = (int)this.WindowState;
  Properties.Settings.Default.MainFormLeft = (int)this.Location.X;
  Properties.Settings.Default.MainFormTop = (int)this.Location.Y;
  Properties.Settings.Default.MainFormWidth = (int)this.Size.Width;
  Properties.Settings.Default.MainFormHeight = (int)this.Size.Height;

  Properties.Settings.Default.Save();

}

実行すると、フォームを閉じた場所に次回起動時にフォームが表示されるようになります。

まとめ

プロジェクトにアプリケーション設定を追加すると、レジストリなどを使わずに簡単に設定値を保存したり読み込んだりすることができます。

公式ページには、任意の型で保存できるような[参照]項目がありますが私の環境では無かったので汎用的な int型で設定を行いましたが、保存するデータ型を選べばもっと簡単なコードで保存や読み込みができるようになります。

簡単な物でも、自分好みのアプリケーションを作っている際中は、結構楽しい気持ちになります。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です