4

いくつかのプロパティを持つカスタムユーザーコントロールを作成しました。1つは、コントロールがアクセスするデータベースを指定します。コントロールのユーザーに、コントロールが対話するデータベースを選択できるドロップダウンを表示できるようにしたいと思います。

ドロップダウンを機能させるにはどうすればよいですか?デフォルト値を取得できますが、選択可能なリストを取得する方法をまだ理解していません。

どんな助けでも感謝されます。

ありがとう。

マーシャル

4

4 に答える 4

3

独自のTypeConverterをプロパティにアタッチする必要があります。GetStandardValuesSupportedメソッドとGetStandardValuesメソッド(おそらくGetStandardValuesExclusiveも)をオーバーライドして、表示するデータベースのリストを返します。

PropertyGridとTypeConverterを初めて使用する場合は、ここにドキュメントがあります。

于 2010-01-08T16:09:23.400 に答える
1

思ったより簡単でした。

プロパティに列挙を設定しましたが、プロパティタイプに使用するのに問題がありました。クラスの外ではアクセスできないと言った。

次に、「duh」の瞬間があり、列挙をFriendからPublicに変更しました。その後、列挙をプロパティタイプとして使用することができました。その結果、コントロールのそのプロパティの値を見ると、列挙からの値がドロップダウンに一覧表示されます。

答えてくれたすべてに感謝します。

マーシャル

于 2010-01-08T16:32:52.177 に答える
0

私はあなたの問題について少し混乱しています。

ユーザーコントロールにDropDownListコントロールが含まれている場合は、ユーザーコントロールのどこかで初期化してください。

最も簡単な方法は、usercontrolのCodebehindで、DropDownList.Items.Add()またはアイテムを追加するための構文を実行することです。

于 2010-01-08T15:52:43.880 に答える
0

コンボボックスのカスタムデータソースを作成するために使用するテンプレートは次のとおりです。

    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

お役に立てれば。覚えておくべきことの1つは、cboNumberにSelectedIndexchangedイベントに既に割り当てられているハンドラーがある場合、問題が発生することです。したがって、デフォルトのイベントを作成しないでください。

于 2010-03-08T19:50:35.533 に答える