Propertygrid en een custom combobox

Status
Niet open voor verdere reacties.

Pororoca

Gebruiker
Lid geworden
2 mei 2009
Berichten
24
:(Dag mensen,

Ik ben bezig met een applicatie die een propertygrid gebruikt. Werkt allemaal prima, maar ik loop tegen 1 ding aan:

Je kan in een properygrid een combobox maken en daar eigen waardes in laten zetten. Dit wordt gedaan met een convertor. Oke... Geen probleem dacht ik. Heb een voorbeeldje gevonden:

Code:
Public Class StatesList : Inherits System.ComponentModel.StringConverter
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>

    Dim _States As String() = New String() {"Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", _
                                            "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", _
                                            "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", _
                                            "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", _
                                            "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"}

    Public Overloads Overrides Function GetStandardValues(ByVal context As System.ComponentModel.ITypeDescriptorContext) As System.ComponentModel.TypeConverter.StandardValuesCollection
        Return New StandardValuesCollection(_States)
    End Function
    '''
    Public Overloads Overrides Function GetStandardValuesSupported(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
        Return True
    End Function
    '''
    Public Overloads Overrides Function GetStandardValuesExclusive(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
        Return True
    End Function
    '''
End Class

En deze in de class voor de properties plaatsen:

Code:
Private _State As String
    '''
    <TypeConverter(GetType(StatesList)), _
        CategoryAttribute("Custom List"), DefaultValueAttribute(""), _
        DescriptionAttribute("Select a state from the list"), Browsable(True)> _
        Public Property State() As String

        Get
            Return _State
        End Get
        Set(ByVal Value As String)
            _State = Value
        End Set
    End Property

Dit werkt allemaal. Maar.... En nu komt het... Ik wil via de applicatie de _States vullen. Voordat de properygrid geactiveerd wordt, wordt er eerst een variabele gevuld. Deze variabele is een ID van een row in een tabel (MySQL). De data uit die row wil ik in de propertygrid plaatsen.

Met andere woorden: Hoe kan ik via de main-applicatie de _State in de convertor vullen? Of zit ik er helemaal naast?

Hoop dat iemand mij kan helpen.. Ben er al een tijdje mee bezig :(

Alvast bedankt,
Pororoca
 
Een globale variabele gebruiken bijvoorbeeld.

Als je hier nog mee bezig bent:

De StatesList class pas je toe op je control door middel van een TypeConverter attribuut, hetgeen ervoor zorgt dat het property grid zelf de StatesList class instantieert wanneer dat nodig is. Daarom kun je dus van de StatesList class niet zelf een "instance" maken, en dus kun je ook geen instance-variabelen zetten (Push). Een alternatief is, om de StatesList class zijn gegevens zelf te laten ophalen (Pull). Je kunt bijvoorbeeld een public property in een voor de editor bereikbaar object aanmaken. Die property moet ook een string-array zijn, net als in de sample die je gevonden had. De variabele achter de property vul je bij opstarten van de applicatie met de waarden uit de database. Stel dat die property ValuesList heet, in het object MijnObject, dan wordt de declaratie in de StatesList class:

Code:
Dim _States As String() = MijnObject.ValuesList

Je zou natuurlijk ook een functie kunnen schrijven in een module, en die aanroepen vanuit de StatesList class, maar dat heeft als nadeel dat die functie dan aangeroepen wordt, iedere keer dat je in het property grid de combobox opent.

Succes!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan