tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルMy.Settingsが永続化できない
記事No4619
投稿日: 2006/12/04(Mon) 10:22
投稿者ダンボ
VB2005では、iniファイルの代わりにMy.Settingsを使うのが好ましそうなので、
http://homepage1.nifty.com/rucio/main/dotnet/technique/teq1_Setting.htm
を参考にして、設定ダイアログを作りました。
ダイアログformのロード時に
PropertyGrid1.SelectedObject = My.Settings
で結合させ、設定を変更した後cmdOKボタン押下で設定を書き込んだつもりです。
    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOK.Click
        My.Settings.Save()
        Me.DialogResult = System.Windows.Forms.DialogResult.OK
        Me.Close()
    End Sub
このプログラムが実行中は確かにMy.Settingsに書き込まれているように見えるのですが、
プログラムを再起動するとMy.Settingsは変更されていません。なんででしょうか?
設定値のスコープはすべてuserです。

[ツリー表示へ]
タイトルRe: My.Settingsが永続化できない
記事No4623
投稿日: 2006/12/04(Mon) 14:31
投稿者魔界の仮面弁士
> このプログラムが実行中は確かにMy.Settingsに書き込まれているように見えるのですが、
> プログラムを再起動するとMy.Settingsは変更されていません。なんででしょうか?

User スコープに対する My.Settings の保存場所は、下記になります。

C:\Documents and Settings\(ユーザ)\Local Settings\Application Data\(会社)\(アプリ)\(バージョン)\user.config

[ツリー表示へ]
タイトルRe^2: My.Settingsが永続化できない
記事No4624
投稿日: 2006/12/04(Mon) 14:46
投稿者ダンボ
魔界の仮面弁士 さん、いつもお世話になっております。

> C:\Documents and Settings\(ユーザ)\Local Settings\Application Data\(会社)\(アプリ)\(バージョン)\user.config

確かにここの設定値は更新されたものになっていました。
根本的な理解が誤っているのかもしれません。永続化された設定値を得るためには
アプリケーションはここのXMLファイルを明示的に読みに行くべきなのですか?

(それでは使いづらいなぁ。My.Settingsに書き込んでSaveすれば再起動したときに
自動的に前回の書き込み値をMy.Settingsに読込んでくれるって物ではないのでしょうか?)

[ツリー表示へ]
タイトルRe^3: My.Settingsが永続化できない
記事No4625
投稿日: 2006/12/04(Mon) 16:03
投稿者魔界の仮面弁士
> 自動的に前回の書き込み値をMy.Settingsに読込んでくれるって物ではないのでしょうか

普通は、そういう動作になるはずですけれども。
途中で、アセンブリのバージョンが変化していたりはしませんか?
(バージョンが変化すると、保存パスも変化しますから)

> My.Settingsに書き込んでSaveすれば再起動したときに

終了時に勝手に保存してくれますから、Save は不要ですよ。
Save は、「プログラムの途中で保存したい場合」に使ってみてください。
(Reload / Reset メソッドも、あわせて調べてみてください)

[ツリー表示へ]
タイトル[解決]My.Settingsが永続化できない
記事No4628
投稿日: 2006/12/04(Mon) 16:21
投稿者ダンボ
> (それでは使いづらいなぁ。My.Settingsに書き込んでSaveすれば再起動したときに
> 自動的に前回の書き込み値をMy.Settingsに読込んでくれるって物ではないのでしょうか?)

そういう仕様でした。
私のプログラム・ミスで、あたかも設定が永続化できないように見えていただけでした。
お騒がせして済みませんでした(疑心暗鬼になるとVBが原因なのか自分が原因なのか見えなくなりますね)。

誤り概要:
・VB6ソースを移植した。
・起動時にiniファイルを読み終了時にiniファイルを書くロジックだったので機械的にMy.Settingsの読み書きに置換した。
・定常動作中にPropertyGridによる設定ダイアログを追加してその中でMy.Settings.save()するようにした。
・にも関わらず終了時にもMy.Settings.save()していた。
・その終了時に書き込む値には追加した設定ダイアログのことが考慮されていなかった。

(何で気がついたかというとステップ実行中のXML内容は正しかったのに、次回起動時にはSettingsがほぼ元に戻っていた。そこで終了時のXML内容を再確認したら。。。)

[ツリー表示へ]