树类#Region "树类"
树型项目类#Region "树型项目类"
Public Class CTreeItemClass CTreeItem
Private intParentDataID As Integer = -1
Private intLevel As Integer = -1
Public DataID As Integer
Public Name As String
Public Value As String
Public OtherInfo As COtherInfo
Public Items As CTreeItemCollection
Private _ParentTree As CTree
Public Property ParentTree()Property ParentTree() As CTree
Get
Return _ParentTree
End Get
Set(ByVal Value As CTree)
_ParentTree = Value
End Set
End Property
Private _ParentTreeItem As CTreeItem
Public Property ParentTreeItem()Property ParentTreeItem() As CTreeItem
Get
Return _ParentTreeItem
End Get
Set(ByVal Value As CTreeItem)
_ParentTreeItem = Value
End Set
End Property
Public Sub New()Sub New()
Me.Items = New CTreeItemCollection(Me)
Me.OtherInfo = New COtherInfo
End Sub
Public ReadOnly Property ParentDataID()Property ParentDataID() As Integer
Get
If intParentDataID = -1 Then
If Not _ParentTreeItem Is Nothing Then
intParentDataID = _ParentTreeItem.DataID
ElseIf Not _ParentTree Is Nothing Then
intParentDataID = 0
End If
End If
Return intParentDataID
End Get
End Property
Public ReadOnly Property Level()Property Level() As Integer
Get
If (intLevel <> -1) Then
Return intLevel
End If
Dim TI As Object = Me.ParentTreeItem
Do While TypeOf TI Is CTreeItem
TI = CType(TI, CTreeItem).ParentTreeItem
intLevel += 1
Loop
intLevel += 1
Return intLevel
End Get
End Property
Private Function GetPrevOrNextTreeItem()Function GetPrevOrNextTreeItem(ByVal blnGetNext As Boolean) As CTreeItem
If ((Me.ParentTreeItem Is Nothing) AndAlso (Me.ParentTree Is Nothing)) Then
Throw New Exception("未设置 ParentTreeItem 或 ParentTree 属性,不能获取上一个或下一个项目。")
End If
Dim TIC As CTreeItemCollection
If Me.ParentTreeItem Is Nothing Then
TIC = Me.ParentTree.Items
Else
TIC = Me.ParentTreeItem.Items
End If
Dim num1 As Integer = TIC.IndexOf(Me)
If blnGetNext Then
If (num1 >= (TIC.Count - 1)) Then
Return Nothing
End If
Return TIC.Item(num1 + 1)
Else
If (num1 <= 0) Then
Return Nothing
End If
Return TIC.Item((num1 - 1))
End If
End Function
Public ReadOnly Property PrevTreeItem()Property PrevTreeItem() As CTreeItem
Get
Return GetPrevOrNextTreeItem(False)
End Get
End Property
Public ReadOnly Property NextTreeItem()Property NextTreeItem() As CTreeItem
Get
Return GetPrevOrNextTreeItem(True)
End Get
End Property
Private strPath As String
Public Function Path()Function Path() As String
If strPath Is Nothing OrElse strPath.Length = 0 Then
If Not Me._ParentTreeItem Is Nothing Then
strPath = Me._ParentTreeItem.Path + "/" + Me.Name
Else
strPath = Me.Name
End If
End If
Return strPath
End Function
Private strDataIDPath As String
Public Function DataIDPath()Function DataIDPath() As String
If Me.DataID > 0 Then
If strDataIDPath Is Nothing OrElse strDataIDPath.Length = 0 Then
If Not Me._ParentTreeItem Is Nothing Then
strDataIDPath = Me._ParentTreeItem.DataIDPath + "/" + Me.DataID.ToString
Else
strDataIDPath = Me.DataID.ToString
End If
End If
Return strDataIDPath
End If
End Function
End Class
#End Region
树型项目集合类#Region "树型项目集合类"
Public Class CTreeItemCollectionClass CTreeItemCollection
Inherits CollectionBase
Public ParentTree As CTree
Public ParentTreeItem As CTreeItem
Public Sub New()Sub New()
MyBase.New()
End Sub
Public Sub New()Sub New(ByVal Parent As CTree)
MyBase.New()
Me.ParentTree = Parent
End Sub
Public Sub New()Sub New(ByVal Parent As CTreeItem)
MyBase.New()
Me.ParentTreeItem = Parent
End Sub
Public Function Add()Function Add(ByVal TreeItem As CTreeItem) As Integer
TreeItem.ParentTree = Me.ParentTree
TreeItem.ParentTreeItem = Me.ParentTreeItem
Return MyBase.List.Add(TreeItem)
End Function
Public Function Item()Function Item(ByVal ItemIndex As Integer) As CTreeItem
Return MyBase.List.Item(ItemIndex)
End Function
Public Function IndexOf()Function IndexOf(ByVal Value As CTreeItem) As Integer
Return MyBase.List.IndexOf(Value)
End Function
Public Function FindByName()Function FindByName(ByVal Name As String) As CTreeItem
For Each TI As CTreeItem In Me.List
If TI.Name = Name Then Return TI
Next
End Function
Public Function Remove()Function Remove(ByVal Name As String) As Boolean
For Each Ti As CTreeItem In Me.List
If Ti.Name = Name Then
MyBase.List.Remove(Ti)
Return True
End If
Next
Return False
End Function
Public Function GetValue()Function GetValue(ByVal Name As String) As String
Dim TI As CTreeItem = FindByName(Name)
If Not TI Is Nothing Then Return TI.Value
End Function
End Class
#End Region
Public Class CTreeClass CTree
Public Items As CTreeItemCollection
Public Sub New()Sub New()
Me.Items = New CTreeItemCollection(Me)
End Sub
Protected Overrides Sub Finalize()Sub Finalize()
MyBase.Finalize()
End Sub
End Class
#End Region
一个简单的树类
最新推荐文章于 2022-09-22 21:27:36 发布