Создайте выпадающий список допустимых значений свойств для пользовательского элемента управления - PullRequest
4 голосов
/ 08 января 2010

Я создал пользовательский элемент управления с несколькими свойствами. Один указывает, к какой базе данных я хочу получить доступ. Я хочу иметь возможность представить пользователю элемента управления раскрывающийся список, из которого он может выбрать, с какой базой данных элемент управления будет взаимодействовать.

Как заставить работать раскрывающийся список? Я могу получить значения по умолчанию, но мне еще предстоит выяснить, как получить выбираемый список.

Любая помощь приветствуется.

Спасибо.

Marshall

Ответы [ 4 ]

3 голосов
/ 08 января 2010

Вам просто нужно прикрепить свой собственный TypeConverter к вашей собственности. Вы переопределите методы GetStandardValuesSupported и GetStandardValues ​​ (может быть, GetStandardValuesExclusive ), чтобы вернуть список баз данных, которые вы хотите показать.

Если вы новичок в PropertyGrid и TypeConverter, вот документ .

1 голос
/ 08 января 2010

Оказывается проще, чем я думал.

У меня было настроено перечисление для свойства, но у меня были проблемы с использованием его для типа свойства. Сказал, что это было недоступно за пределами класса.

Затем у меня был момент «дух» и я изменил перечисление с Friend на Public, и затем я смог использовать перечисление в качестве типа свойства. В результате значения из перечисления перечислены в раскрывающемся списке, когда я смотрю на значения для этого свойства элементов управления.

Спасибо всем, кто ответил.

Marshall

0 голосов
/ 08 марта 2010

Вот шаблон, который я использую для создания собственного источника данных для своих списков:

    Private Class Listing

    Private _List As New ArrayList

    Public Sub Add(ByVal ItemNumber As Integer, ByVal ItemName As String)

        _List.Add(New dataItem(ItemNumber, ItemName))

    End Sub

    Public ReadOnly Property List() As ArrayList
        Get
            Return _List
        End Get
    End Property

End Class

Private Class dataItem
    Private _ItemNumber As Integer
    Private _ItemName As String

    Public Sub New(ByVal intItemNumber As Integer, ByVal strItemName As String)
        Me._ItemNumber = intItemNumber
        Me._ItemName = strItemName
    End Sub

    Public ReadOnly Property ItemName() As String
        Get
            Return _ItemName
        End Get
    End Property

    Public ReadOnly Property ItemNumber() As Integer
        Get
            Return _ItemNumber
        End Get
    End Property

    Public ReadOnly Property DisplayValue() As String

        Get
            Return CStr(Me._ItemNumber).Trim & " - " & _ItemName.Trim
        End Get

    End Property

    Public Overrides Function ToString() As String

        Return CStr(Me._ItemNumber).Trim & " - " & _ItemName.Trim

    End Function

End Class

И вот как я его загружаю:

    ListBindSource = New Listing

    Me.BindingSource.MoveFirst()
    For Each Row As DataRowView In Me.BindingSource.List
        Dim strName As String = String.Empty
        Dim intPos As Integer = Me.BindingSource.Find("Number", Row("Number"))
        If intPos > -1 Then
            Me.BindingSource.Position = intPos
            strName = Me.BindingSource.Current("Name")
        End If
        ListBindSource.Add(Row("Number"), strName)
    Next

    cboNumber.DataSource = ListBindSource.POList
    cboNumber.DisplayMember = "DisplayValue"
    cboNumber.ValueMember = "Number"
    AddHandler cboNumber.SelectedIndexChanged, AddressOf _
            cboNumber_SelectedIndexChanged

Надеюсь, это поможет. Следует иметь в виду, что если cboNumber уже имеет обработчик, назначенный событию SelectedIndexchanged, у вас возникнут проблемы. Поэтому не создавайте событие по умолчанию.

0 голосов
/ 08 января 2010

Я немного озадачен вашей проблемой.

Если ваш пользовательский элемент управления содержит элемент управления DropDownList, просто инициализируйте его где-нибудь в пользовательском элементе управления.

Самый простой способ в Codebehind для usercontrol, просто сделать DropDownList.Items.Add () или любой другой синтаксис для добавления элемента.

...