none
PropertyGridでの文字列リストの表示 RRS feed

  • 質問

  • いつもお世話になっております。

     

    コンボボックスで文字列のリストの一覧から、文字列を選択するコントロールを使用していたのですが、

    PropertyGrid内にその文字列のリスト選択を実現できないか検討しています。

     

    Enum型のプロパティを表示した場合のイメージで実現したいと考えています。

     

    データ数やデータ内容が画面を開くたびリストの内容に変更があるような場合、

    Enum型と同じような表現がPropertyGridで実現する方法があれば教えてください。

     

    環境は VS.NET 2003 C#  XP です。

     

    よろしくお願い致します。

    2008年2月12日 8:37

回答

  • kinzi815 さん、こんにちは
    ダッチです。

     

    StringConverter クラスを使用すれば出来そうな気がします。

     

    まず PropertyGrid コントロールの扱う際に参考になるサイトがありますので、先にこちらを紹介します。

    「ドメイン リストおよび簡単なドロップダウン プロパティのサポート」の部分を参照してください。


    リンク先で説明している部分を抜粋します。


    Code Snippet

    Public Class FileNameConverter
        Inherits StringConverter

        Public Overloads Overrides Function GetStandardValuesSupported(ByVal context As ITypeDescriptorContext) As Boolean
            Return True
        End Function

        Public Overloads Overrides Function GetStandardValues(ByVal context As ITypeDescriptorContext) As StandardValuesCollection
            Return New StandardValuesCollection(New String() {"新規ファイル", "File1", "Document1"})
        End Function

        Public Overloads Overrides Function GetStandardValuesExclusive(ByVal context As ITypeDescriptorContext) As Boolean
            Return False
        End Function
    End Class

     

     

    FileNameConverter クラスを使用するには次のようにします。

     

    Code Snippet

    Public Class TestClass

        Private _Test As String


        <TypeConverter(GetType(FileNameConverter))> _
        Public Property Test() As String
            Get
                Return _Test
            End Get
            Set(ByVal value As String)
                _Test = value
            End Set
        End Property

    End Class

     

     

    FileNameConverter クラスの GetStandardValues メソッドで返した値がドロップダウンリストに表示されます。

    引数の context から TestClass クラスのインスタンスを取得することができます。

    TestClass クラスにデータを表示するのに必要なデータがそろっていれば素直にデータを作成して表示することができると思います。

    2008年2月12日 12:46

すべての返信

  • kinzi815 さん、こんにちは
    ダッチです。

     

    StringConverter クラスを使用すれば出来そうな気がします。

     

    まず PropertyGrid コントロールの扱う際に参考になるサイトがありますので、先にこちらを紹介します。

    「ドメイン リストおよび簡単なドロップダウン プロパティのサポート」の部分を参照してください。


    リンク先で説明している部分を抜粋します。


    Code Snippet

    Public Class FileNameConverter
        Inherits StringConverter

        Public Overloads Overrides Function GetStandardValuesSupported(ByVal context As ITypeDescriptorContext) As Boolean
            Return True
        End Function

        Public Overloads Overrides Function GetStandardValues(ByVal context As ITypeDescriptorContext) As StandardValuesCollection
            Return New StandardValuesCollection(New String() {"新規ファイル", "File1", "Document1"})
        End Function

        Public Overloads Overrides Function GetStandardValuesExclusive(ByVal context As ITypeDescriptorContext) As Boolean
            Return False
        End Function
    End Class

     

     

    FileNameConverter クラスを使用するには次のようにします。

     

    Code Snippet

    Public Class TestClass

        Private _Test As String


        <TypeConverter(GetType(FileNameConverter))> _
        Public Property Test() As String
            Get
                Return _Test
            End Get
            Set(ByVal value As String)
                _Test = value
            End Set
        End Property

    End Class

     

     

    FileNameConverter クラスの GetStandardValues メソッドで返した値がドロップダウンリストに表示されます。

    引数の context から TestClass クラスのインスタンスを取得することができます。

    TestClass クラスにデータを表示するのに必要なデータがそろっていれば素直にデータを作成して表示することができると思います。

    2008年2月12日 12:46
  • ダッチさん、回答ありがとうございます。

     

    回答内容から、希望していたとおりの動作を実現できました。

     

    わかりやすい回答ありがとうございました。

    2008年2月14日 4:10