Visual Basicにおいて、セッション間でフォームの状態(サイズ、位置、フィールドの値)を保存する主なタスクは、アプリケーション終了時に外部ソース(ファイル、レジストリ、ユーザー設定)にデータを書き込み、アプリケーション起動時に復元することです。
アプローチ:
My.Settingsを使用した例:
' 状態の保存 Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing My.Settings.WindowLocation = Me.Location My.Settings.WindowSize = Me.Size My.Settings.Save() End Sub ' 状態の復元 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load If Not My.Settings.WindowSize.IsEmpty Then Me.Size = My.Settings.WindowSize End If If Not My.Settings.WindowLocation.IsEmpty Then Me.Location = My.Settings.WindowLocation End If End Sub
設定はデザイナーを通じて追加するか、手動で行います。
要点:
My.Settingsを通じて非標準オブジェクト(例えば、DataTable)を保存することはできますか?それを正しく実装するにはどうすればよいですか?
答え: はい、ただし設定はユーザータイプである必要があり、オブジェクトはシリアライズをサポートしている必要があります。DataTableや複雑なオブジェクトの場合、My.Settingsはシリアライズされたバイナリ/XML形式を保存します。シリアライズのサポートを実装するか、シリアライザを通じて手動で書き込む必要があります。
物語
アプリケーションでフォームの状態をWindowsレジストリに保存していました。いくつかの更新の後、ユーザーが権限の制限により設定にアクセスできなくなり、大量のサポートリクエストが発生しました。解決策は、ユーザープロファイルでMy.Settingsに移行することでした。
物語
アプリケーション起動時にウィンドウの位置の座標を確認せずに、アプリケーションが画面の見えない領域に表示されました(セカンドモニターが変更されました)。フォームの位置を復元する際に、デスクトップの境界を確認するロジックが追加されました。
物語
アプリケーションの古いバージョンからの更新時に、開発者はユーザー設定(入れ子のフィールドを持つフォーム)の移行を行いませんでした。結果として、データの損失とユーザーの不満が生じました。設定のバージョン移行をサポートし、互換性を制御する方針が採用されました。