C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: Settingsファイルの項目について


(過去ログ 177 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■101813 / inTopicNo.1)  Settingsファイルの項目について
  
□投稿者/ shigeru (5回)-(2023/04/26(Wed) 10:08:09)

分類:[VB.NET/VB2005 以降] 

Visual Studio 2019 でVBのツールを作成しています
フォームの位置やサイズなど記憶したい項目をMy.Setttingsへ登録・読み出しして使用しています。

ツールのバージョンアップで設定項目が増え旧バージョンで設定した内容を引き継ぎつつ新しい項目を追加したいのですが、まだない項目を読もうとすると当然エラーになります。
My.Setttingsへ指定の項目があればその内容を読み込む、なければ項目を追加してデフォルト値を記憶するといったことがしたいです。
よろしくお願いします


引用返信 編集キー/
■101814 / inTopicNo.2)  Re[1]: Settingsファイルの項目について
□投稿者/ WebSurfer (2676回)-(2023/04/26(Wed) 11:10:49)
No101813 (shigeru さん) に返信

> なければ項目を追加してデフォルト値を記憶するといったことがしたいです。

プログラムで動的にそれをやりたいと言ってますか?
引用返信 編集キー/
■101815 / inTopicNo.3)  Re[2]: Settingsファイルの項目について
□投稿者/ shigeru (7回)-(2023/04/26(Wed) 11:21:22)
No101814 (WebSurfer さん) に返信
> ■No101813 (shigeru さん) に返信
>
>>なければ項目を追加してデフォルト値を記憶するといったことがしたいです。
>
> プログラムで動的にそれをやりたいと言ってますか?

はい
無理でしょうか?
引用返信 編集キー/
■101816 / inTopicNo.4)  Re[3]: Settingsファイルの項目について
□投稿者/ WebSurfer (2677回)-(2023/04/26(Wed) 11:29:04)
No101815 (shigeru さん) に返信

>>プログラムで動的にそれをやりたいと言ってますか?
>
> はい
> 無理でしょうか?

無理だと思います(自分が知らないだけだという可能性は否定しきれませんが)

例えば、JSON 文字列などを保存するようにして、項目の追加があればその JSON 文字列に
追加するようにし、追加後の JSON 文字列を保存するというようなことではいかがですか?

引用返信 編集キー/
■101817 / inTopicNo.5)  Re[4]: Settingsファイルの項目について
□投稿者/ くま (1回)-(2023/04/26(Wed) 11:39:38)
こういう事?
http://dobon.net/vb/dotnet/programing/mysettings.html
引用返信 編集キー/
■101818 / inTopicNo.6)  Re[5]: Settingsファイルの項目について
□投稿者/ shigeru (8回)-(2023/04/26(Wed) 12:31:22)
ご指導ありがとうございます
やはり項目の追加や有無判定は簡単ではなさすですね。
My.Settingsを使う前にuser.configを自分で開いて確認・編集すればできそうな気がしますが・・・
JSON文字列の例もありがとうございます
ただし、すでに展開済のツールに対して新たに追加することが同様の理由で難しそうです。

もう少し考えてみます
引用返信 編集キー/
■101819 / inTopicNo.7)  Re[1]: Settingsファイルの項目について
□投稿者/ 魔界の仮面弁士 (3627回)-(2023/04/26(Wed) 12:52:17)
No101813 (shigeru さん) に返信
> ツールのバージョンアップで設定項目が増え旧バージョンで設定した内容を引き継ぎつつ新しい項目を追加したいのですが、まだない項目を読もうとすると当然エラーになります。
> My.Setttingsへ指定の項目があればその内容を読み込む、なければ項目を追加してデフォルト値を記憶するといったことがしたいです。

ClickOnce 配置などにおいて、旧バージョンの設定を引き継ぐといったことはしばしば行われます。
いわゆる My.Settings.Upgrade() メソッドのことですが、それではだめですか?

http://dobon.net/vb/dotnet/programing/mysettings.html


1) 新バージョンに、Boolean 型のメンバー、たとえば IsUpgraded という設定値を追加します。
 既定値は False にしておきます。
 旧バージョンには IsUpgraded メンバーが無い前提です。

2) アプリ起動後、My.Settings.IsUpgraded を確認します。
 If Not My.Settings.IsUpgraded Then
  My.Settings.Upgrade() '旧バージョンの引継ぎ
  My.Settings.IsUpgraded = True
  My.Settings.Save()
 End If


旧バージョンの設定ファイルに無いメンバーなので、
コンパイル時の既定値(今回は False) が読み込まれます。

Upgrade メソッドを読み込むことで、旧バージョンの情報が引き継がれます。
(特定のバージョンを指定して読み込むことはできません)

Upgrade 後は、Boolean メンバーである IsUpgraded を True に変更して保存します。
これで、次回以降は更新済みの状態で開始できます。

メンバー名などは、実際のプロジェクトに合わせて適宜調整してください。
上記では Boolean 値の既定値を False 設定にした IsUpgraded という項目にしましたが、
逆に、既定値を True にした UpdateRequired などというメンバーにしても良いでしょう。
https://shiroyuki-mot-says.blogspot.com/2017/01/vb-mysettings-for-version-up-and-collection.html
引用返信 編集キー/
■101820 / inTopicNo.8)  Re[6]: Settingsファイルの項目について
□投稿者/ WebSurfer (2678回)-(2023/04/26(Wed) 12:52:23)
No101818 (shigeru さん) に返信

> My.Settingsを使う前にuser.configを自分で開いて確認・編集すればできそうな気がしますが・・・

できないと思います。

Visual Studio のデザイナが自動的に生成する Settings.settings.vb はどうするのですか?


> JSON文字列の例もありがとうございます
> ただし、すでに展開済のツールに対して新たに追加することが同様の理由で難しそうです。

難しい/難しくないという事情が分かりませんが、ダメなことを裏技小技を使って何とかしよう
とするよりも、たとえ既存のコードの手を加えなければならないとしても、普通に Visual Studio
に備わっていく機能を使った方が、結局は時間と労力の節約になるのではないかと思うのですが。
引用返信 編集キー/
■101821 / inTopicNo.9)  Re[6]: Settingsファイルの項目について
□投稿者/ WebSurfer (2679回)-(2023/04/26(Wed) 13:19:59)
No101818 (shigeru さん) に返信

ご参考:

Settings.settings の使い方
http://surferonwww.info/BlogEngine/post/2021/06/05/how-to-get-and-set-values-in-settings-file.aspx

上の記事のように、Visual Studio が自動的に生成するファイルはいろいろあって、
user.config を編集して何とかなるものではなさそうです。
引用返信 編集キー/
■101831 / inTopicNo.10)  Re[7]: Settingsファイルの項目について
□投稿者/ shigeru (9回)-(2023/04/27(Thu) 17:39:56)
皆さん、ありがとうございます
いろいろ調べたつもりではあったのですが、My.Settings.Upgradeにたどり着いていませんでした。
魔界の仮面弁士さんが書かれているように、If Not My.Settings.IsUpgraded Thenを書くとIsUpgraded がメンバーでないとエラーが出ていたので悩んでいました。
新しいバージョンにはIsUpgraded を追加しておけばよかったんですね。
しっかりと勉強させていただきます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -