Option Explicit On
''' <summary>
''' 可以取出key值的collection
''' </summary>
''' <remarks></remarks>
Public Class MyCollection
Private colKey As New Collection
Private colVal As New Collection
Private _index As Integer
Friend Delegate Sub delegate_itemChanged(ByVal sender As Object, ByVal e As MyCollectionItemChangedEventArgs)
Friend Event ItemChanged As delegate_itemChanged
''' <summary>
''' 集合中的数量
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property Count() As Long
Get
Count = colKey.Count
End Get
End Property
''' <summary>
''' 按索引返回值
''' </summary>
''' <param name="index"></param>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Default Public ReadOnly Property Item(ByVal index As Integer) As String
Get
Item = colVal(index)
End Get
End Property
''' <summary>
''' 按键值返回值
''' </summary>
''' <param name="key"></param>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Default Public ReadOnly Property Item(ByVal key As String) As String
Get
Item = colVal(Me.Index(key))
End Get
End Property
''' <summary>
''' 添加元素
''' </summary>
''' <param name="Item"></param>
''' <param name="Key"></param>
''' <param name="Before"></param>
''' <param name="After"></param>
''' <remarks></remarks>
Public Sub Add(ByVal Item, Optional ByVal Key = Nothing, Optional ByVal Before = Nothing, Optional ByVal After = Nothing)
colKey.Add(Key, Key, Before, After)
colVal.Add(Item, Key, Before, After)
RaiseEvent ItemChanged(Me, New MyCollectionItemChangedEventArgs(New String() {Item.ToString}))
End Sub
''' <summary>
''' 按索引移除元素
''' </summary>
''' <param name="index"></param>
''' <remarks></remarks>
Public Sub Remove(ByVal index As Integer)
Dim v As String = colVal(index).ToString
colKey.Remove(index)
colVal.Remove(index)
RaiseEvent ItemChanged(Me, New MyCollectionItemChangedEventArgs(New String() {v}))
End Sub
''' <summary>
''' 按键值移除元素
''' </summary>
''' <param name="key"></param>
''' <remarks></remarks>
Public Sub Remove(ByVal key As String)
Dim index As Integer = Me.Index(key)
If index < 1 Then
Return
End If
Dim v As String = colVal(index).ToString
colKey.Remove(index)
colVal.Remove(index)
RaiseEvent ItemChanged(Me, New MyCollectionItemChangedEventArgs(New String() {v}))
End Sub
''' <summary>
''' 根据元素获取键值
''' </summary>
''' <param name="value"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetKey(ByVal value As String) As String
getKey = Nothing
For i As Integer = 1 To colVal.Count
If colVal(i).ToString = value Then
getKey = colKey.Item(i)
End If
Next
End Function
''' <summary>
''' 清空集合
''' </summary>
''' <remarks></remarks>
Public Sub Clear()
colKey.Clear()
colVal.Clear()
Dim items(colVal.Count - 1) As String
For i As Integer = 1 To colVal.Count
Dim item As String = colVal(i).ToString
items(i - 1) = item
Next
RaiseEvent ItemChanged(Me, New MyCollectionItemChangedEventArgs(items))
End Sub
''' <summary>
''' 返回一个boolean值,确定该Mycollection对象是否包含具有特定键的元素
''' </summary>
''' <param name="key"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Contains(ByVal key As String) As Boolean
Contains = colVal.Contains(key)
End Function
''' <summary>
''' 返回一个boolean值,确定该Mycollection对象是否包含特定的元素
''' </summary>
''' <param name="val"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function ContainsV(ByVal val As String) As Boolean
For i As Integer = 1 To colVal.Count
If colVal(i).ToString = val Then
Return True
End If
Next
Return False
End Function
''' <summary>
''' 按键值返回索引
''' </summary>
''' <param name="key"></param>
''' <returns></returns>
''' <remarks></remarks>
Friend Function Index(ByVal key As String) As Integer
For i As Integer = 1 To colKey.Count
If key = colKey(i) Then
Return i
End If
Next
End Function
End Class
Public Class MyCollectionItemChangedEventArgs
Inherits EventArgs
Private _changedItems() As String
Sub New(ByVal ChangedItems() As String)
Me._changedItems = ChangedItems
End Sub
Friend ReadOnly Property ChangedItems() As String()
Get
Return Me._changedItems
End Get
End Property
Friend ReadOnly Property ChangedCount() As Integer
Get
Return Me._changedItems.Length
End Get
End Property
End Class
MyCollection_new
最新推荐文章于 2024-08-24 15:19:30 发布