Dear all,
I've got a problem with my custom combo box.
When I select an entry from it, then I get the error message:
"An unhandled exception of type 'System.Argumen tOutOfRangeExce ption'
occurred in system.windows. forms.dll
Additional information: Specified argument was out of the range of valid
values."
Could you help me to get it running?
Thanks in advance for your help!
Best Regards,
HKSHK
Source Code follows:
Public Class HKSCBObjectColl ection
Inherits System.Windows. Forms.ComboBox. ObjectCollectio n
Dim vItemData() As Long
#Region "Constructo r"
Public Sub New(ByVal owner As System.Windows. Forms.ComboBox)
MyBase.New(owne r)
End Sub
#End Region
#Region "Add and Insert"
Public Shadows Function Add(ByVal Item As Object) As Integer
Return Add(Item, 0)
End Function
Public Shadows Function Add(ByVal Item As Object, ByVal ItemData As Long)
Dim t% = MyBase.Add(Item )
ReDim vItemData(t%)
vItemData(t%) = ItemData
Return t%
End Function
Public Shadows Sub Insert(ByVal Index As Integer, ByVal Item As Object)
Insert(Index, Item, 0)
End Sub
Public Shadows Sub Insert(ByVal Index As Integer, ByVal Item As Object,
ByVal ItemData As Long)
Dim t%
If Index > -1 And Index < Me.Count + 1 Then
If Index = UBound(vItemDat a) + 1 Then
Add(Item, ItemData)
Else
MyBase.Insert(I ndex, Item)
ReDim Preserve vItemData(Index + 1)
For t% = UBound(vItemDat a) To Index + 1 Step -1
vItemData(t%) = vItemData(t% - 1)
Next
vItemData(Index ) = ItemData
End If
End If
End Sub
#End Region
Private Sub CheckItemData()
Dim t%, t1%
t1% = UBound(vItemDat a)
If t1% <> Me.Count Then
ReDim Preserve vItemData(Me.Co unt - 1)
End If
End Sub
Public Property ItemData(ByVal Index As Integer) As Long
Get
CheckItemData()
Return vItemData(Index )
End Get
Set(ByVal Value As Long)
vItemData(Index ) = Value
End Set
End Property
#Region "Remove, RemoveAt and Clear"
Public Shadows Function Remove(ByVal Item As Object) As Integer
Dim t%
For t% = 0 To Me.Count - 1
If Me.Item(t%) = Item Then
RemoveAt(t%)
Return t%
Exit For
End If
Next
End Function
Public Shadows Sub RemoveAt(ByVal Index As Integer)
Dim t%, t1%
If Index > -1 Then
MyBase.RemoveAt (Index)
t1% = UBound(vItemDat a)
If Index < t1% Then
For t% = Index To t1% - 1
vItemData(t%) = vItemData(t% + 1)
Next
End If
ReDim Preserve vItemData(Index - 1)
End If
End Sub
Public Shadows Sub Clear()
MyBase.Clear()
ReDim vItemData(-1)
End Sub
#End Region
End Class
Public Class Testbox
Inherits System.Windows. Forms.ComboBox
Private vItems As New HKSCBObjectColl ection(Me)
Private vToolTip As New System.Windows. Forms.ToolTip
Public Shadows ReadOnly Property Items() As HKSCBObjectColl ection
Get
Return vItems
End Get
End Property
Protected Overrides Sub RefreshItem(ByV al index As Integer)
MyBase.RefreshI tem(index)
End Sub
Protected Overrides Sub SetItemsCore(By Val items As
System.Collecti ons.IList)
MyBase.SetItems Core(items)
End Sub
End Class