none
My.Settingsの各項目に説明文を付けたい RRS feed

  • 質問

  • 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 
     

    2009年3月17日 3:02

回答

  • 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.vb

    Public 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
    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.

    そういうこわけで、今回の目的には使えなさそうです。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年3月17日 15:12
    モデレータ
  • 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.vb

    Public 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
    2009年3月18日 1:15