My.Setting を利用するのが便利ですね。
でも、 ふたつ、気を付けた方が良い事があります。
それは、 Version Up の問題 と Collection の扱い です。
様々な対処方法があると思いますので、
以下に示すのは、 その一例とお考え下さい。
また、 Code は WPF で書いたものですが、
基本的に、 Form でも同じ考え方で OK です。
先ずは、 Version Up の問題。
ご存知の様に、 My.Setting は user.config ファイル ( XML 形式 ) として、所定の場所に保存されます。
ユーザー(個人)プロファイル の AppData 配下 になりますね。
これは、 バージョン毎に独立したフォルダ構成を取ります。
ですから、 基本的には、 プログラムの更新をして、 そのバージョン番号を繰り上げると、
また、別の フォルダが用意され、 そこにファイルが格納されます。
バージョンアップで、 一から新しく再スタート! と言うのは、非常に、限られたケースだと思います。
通常は、今迄の環境(変数の設定値 や 動作状態) を、 繰り越し したい のではないでしょうか。
そこで、 以下の方法で、 旧バージョンの My.Settimg を 繰り越して あげましょう。
この方法では、既に設定されている 変数 をそのまま保持 しますので、
Project に 途中から この バージョン更新対応 を取り入れる事が可能です。
こんなコード。 Project の Setting に 項目 UpdateRequired を追加の上。.
Class MainWindow
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
SetAppUpdate() 'user.config Upgrade For App Version Up
End Sub
Private Sub SetAppUpdate()
'For user.config
'UpdateRequired Type:Boolean DefaultValue:True
If My.Settings.UpdateRequired Then
My.Settings.Upgrade()
My.Settings.UpdateRequired = False
My.Settings.Save()
End If
End Sub
End Class
さて、 次は、 Collection の扱い。
XML シリアライズが必要ですから、
簡単に済ますなら、 System.Collections.Specialized.StringCollection を使います。 Visual Studio 2013 検証。.
これに、 初期値として、 何かしら( Code 中の例では 'Sample' ) を格納した状態にして置きます。
Visual Studio の Project の Settings タブから作業します。 「 ... 」 ボタン で値を設定しましょう。
初期値なしでも良いのですが、 .Count 等のロジック ( Nothing 対応 )が複雑になり易いので、
未設定である旨が分かる値を事前に入れて置くのが簡単です。
勿論、実行環境に左右されないものであれば、最初から、正規の値を代入して置いても良いのは当然です。
プログラムを起動した、最初の段階で、 値をチェックし、
もし、その 何か ( 'Sample' ) ひとつ しか 入っていなければ、
これを削除し、 所定の値 群 を 順次 格納して行きます。
Collection を格納したい場合には、こんなコード。
細かい値の操作用ロジックは省略していますが、
単に、 Project 内で自由に使える 変数 として valuableXXX を設定し、
これを My.Settings に登録するだけです。
シリアライズ化を前提に用意された System.Collections.Specialized.StringCollection は、
そのまま Collection として利用が可能です。.
Class MainWindow
'Setting User Scope
'Collection for user.config
' Type:System.Collections.Specialized.StringCollection
'Please Set Default Value ex. 'Sample' (Handling on Program)
Friend valuableXXX As New System.Collections.Specialized.StringCollection
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
End Sub
Friend Sub ReadSetting()
End Sub
Friend Sub WriteSetting()
End Sub
End Class
いや、 どうしても、valuableYYY は List(of String) じゃなけりゃ と言うのなら、
以下のコード。
Settings の View Code から 以下の記述を追加します。 灰色の部分は Default 。 黒字のみ追加。.
但し、一般的な項目、 String や Boolean の様に、 Settings タブ内で設定値を記述する事は出来ません。
また、 このタブ内で、 変数 valuableYYY は登場しません。 登録してはいけません。.
Partial Friend NotInheritable Class MySettings
<Global.System.Configuration.UserScopedSettingAttribute()> _
Public Property valuableYYY() As System.Collections.Generic.List(Of String)
Get
Return CType(Me("valuableYYY"), System.Collections.Generic.List(Of String))
End Get
Set(ByVal value As System.Collections.Generic.List(Of String))
Me("valuableYYY") = value
End Set
End Property
End Class
少し、端折って書いてしまいましたが、 何かの参考になれば幸いです。
0 件のコメント:
コメントを投稿