トップ回答者
My.Settingsの各項目に説明文を付けたい

質問
-
VB2005 Expressの環境でアプリケーションを開発する際、設定ファイルは My.Settings の機構を利用(app.config)しています。
編集はIDEの「設定」から行いました。
これらの設定値の一覧シートを表形式で作成したいと思い、Excelにapp.configをインポートしたいと思ったのですが、各設定値の説明文をIDE上で入力しておいてapp.configの内容に反映させる、という仕掛けはできないものでしょうか。
設定に説明文を付加するのに SettingsDescriptionAttribute という属性が利用できると DOBON.NET さんのところで見つけたのですが
http://dobon.net/vb/dotnet/programing/applicationsettingsbase.html
My Project\Settings.Designer.vb に以下のように記述を加えてみたのですがどこに影響が出たのか分からず。
何か見当違いな事をしていますでしょうか。<Global.System.Configuration.UserScopedSettingAttribute(), _ Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.Configuration.SettingsDescriptionAttribute("説明文を入れてみた"), _ Global.System.Configuration.DefaultSettingValueAttribute("COM8")> _ Public Property DEVICE_COM_NO() As String Get Return CType(Me("DEVICE_COM_NO"), String) End Get Set(ByVal value As String) Me("DEVICE_COM_NO") = value End Set End Property
回答
-
Azulean 様
情報有難う御座います。
ズバリやりたかったのはVB2005の「設定」の中での編集作業で「My.Settings」以下の各設定項目に対する説明文を添付して、
必要に応じてレポート出力する、という事でした。
おっしゃるとおり SettingsDescriptionAttribute では難しそうです。
特に前者の「設定」で編集、は特に無茶な狙いだと思いますので諦めましたが、後者のレポート出力する、については
(今のところ効率度外視ですが)テスト実装してみましたので以下添付してみます。
~ 以下、My Project\Settings.Designer.vb の記述に SettingsDescriptionAttribute 属性の1文を追加<Global.System.Configuration.ApplicationScopedSettingAttribute(), _ Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.Configuration.SettingsDescriptionAttribute("SetttingsDescription情報:名前です"), _ Global.System.Configuration.DefaultSettingValueAttribute("太郎")> _ Public ReadOnly Property SettingName() As String Get Return CType(Me("SettingName"), String) End Get End Property
~ 以下、Form1.vbPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim info As System.Reflection.PropertyInfo = My.Settings.GetType.GetProperty("SettingName") Dim list() As Object = info.GetCustomAttributes(GetType(Global.System.Configuration.SettingsDescriptionAttribute), False) For Each item As Object In list Console.WriteLine(item.description) Next End Sub End Class
VB2005 ですと基本はIDEが自動編集する隠しファイルの Settings.Designer.vb を追加で手編集しているのでその辺で整合性矛盾など出ないかどうか、
またこの方法で入れて果たして説明文を入れる作業が効率化できるのか(汗)が今のところの心配です。
なんとなくMy.Settings.GetType.GetProperties で呼び出した項目名毎に独自で Dictionary(Of String,String) のコレクションに入れて
シリアライズ、デシリアライズできるようにしておけばよい気がしてきました…ファイル名"app.config.description"とかで。
検討してみます。
- 回答としてマーク wataru.kato 2009年3月18日 1:15
すべての返信
-
USのフォーラムに下記のようなスレッドがありました。
SettingsDescriptionAttribute - How is it used?
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/a9b4bc51-a165-4e80-b619-6b094e3fcbc7/
MSFT Johan Stenberg said:そういうこわけで、今回の目的には使えなさそうです。It is mainly meant to be used by Intellisense/be consumed by humans.
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。 -
Azulean 様
情報有難う御座います。
ズバリやりたかったのはVB2005の「設定」の中での編集作業で「My.Settings」以下の各設定項目に対する説明文を添付して、
必要に応じてレポート出力する、という事でした。
おっしゃるとおり SettingsDescriptionAttribute では難しそうです。
特に前者の「設定」で編集、は特に無茶な狙いだと思いますので諦めましたが、後者のレポート出力する、については
(今のところ効率度外視ですが)テスト実装してみましたので以下添付してみます。
~ 以下、My Project\Settings.Designer.vb の記述に SettingsDescriptionAttribute 属性の1文を追加<Global.System.Configuration.ApplicationScopedSettingAttribute(), _ Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.Configuration.SettingsDescriptionAttribute("SetttingsDescription情報:名前です"), _ Global.System.Configuration.DefaultSettingValueAttribute("太郎")> _ Public ReadOnly Property SettingName() As String Get Return CType(Me("SettingName"), String) End Get End Property
~ 以下、Form1.vbPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim info As System.Reflection.PropertyInfo = My.Settings.GetType.GetProperty("SettingName") Dim list() As Object = info.GetCustomAttributes(GetType(Global.System.Configuration.SettingsDescriptionAttribute), False) For Each item As Object In list Console.WriteLine(item.description) Next End Sub End Class
VB2005 ですと基本はIDEが自動編集する隠しファイルの Settings.Designer.vb を追加で手編集しているのでその辺で整合性矛盾など出ないかどうか、
またこの方法で入れて果たして説明文を入れる作業が効率化できるのか(汗)が今のところの心配です。
なんとなくMy.Settings.GetType.GetProperties で呼び出した項目名毎に独自で Dictionary(Of String,String) のコレクションに入れて
シリアライズ、デシリアライズできるようにしておけばよい気がしてきました…ファイル名"app.config.description"とかで。
検討してみます。
- 回答としてマーク wataru.kato 2009年3月18日 1:15