いくつかのプロパティを持つカスタムユーザーコントロールを作成しました。1つは、コントロールがアクセスするデータベースを指定します。コントロールのユーザーに、コントロールが対話するデータベースを選択できるドロップダウンを表示できるようにしたいと思います。
ドロップダウンを機能させるにはどうすればよいですか?デフォルト値を取得できますが、選択可能なリストを取得する方法をまだ理解していません。
どんな助けでも感謝されます。
ありがとう。
マーシャル
いくつかのプロパティを持つカスタムユーザーコントロールを作成しました。1つは、コントロールがアクセスするデータベースを指定します。コントロールのユーザーに、コントロールが対話するデータベースを選択できるドロップダウンを表示できるようにしたいと思います。
ドロップダウンを機能させるにはどうすればよいですか?デフォルト値を取得できますが、選択可能なリストを取得する方法をまだ理解していません。
どんな助けでも感謝されます。
ありがとう。
マーシャル
独自のTypeConverterをプロパティにアタッチする必要があります。GetStandardValuesSupportedメソッドとGetStandardValuesメソッド(おそらくGetStandardValuesExclusiveも)をオーバーライドして、表示するデータベースのリストを返します。
PropertyGridとTypeConverterを初めて使用する場合は、ここにドキュメントがあります。
思ったより簡単でした。
プロパティに列挙を設定しましたが、プロパティタイプに使用するのに問題がありました。クラスの外ではアクセスできないと言った。
次に、「duh」の瞬間があり、列挙をFriendからPublicに変更しました。その後、列挙をプロパティタイプとして使用することができました。その結果、コントロールのそのプロパティの値を見ると、列挙からの値がドロップダウンに一覧表示されます。
答えてくれたすべてに感謝します。
マーシャル
私はあなたの問題について少し混乱しています。
ユーザーコントロールにDropDownListコントロールが含まれている場合は、ユーザーコントロールのどこかで初期化してください。
最も簡単な方法は、usercontrolのCodebehindで、DropDownList.Items.Add()またはアイテムを追加するための構文を実行することです。
コンボボックスのカスタムデータソースを作成するために使用するテンプレートは次のとおりです。
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イベントに既に割り当てられているハンドラーがある場合、問題が発生することです。したがって、デフォルトのイベントを作成しないでください。