은 내 콤보에 대한 사용자 지정 데이터 소스를 만들 때 사용하는 템플릿입니다 :
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 이벤트에 할당 된 처리기가 있으면 문제가 발생한다는 것입니다. 따라서 기본 이벤트를 만들지 마십시오.
나는 사용자 콘트롤 자체에서 콤보 박스를 사용하는 것에 대해 이야기하지 않는다. 나는 그것을 컨트롤의 속성 상자에서 사용하는 것에 대해 이야기하고 있습니다. 유효한 값을 제한하려는 속성이 있습니다. 이전에 속성 페이지에서 드롭 다운을 본 적이 있었고 해당 동작을 복제하려고했습니다. – Marshall