一个简单的树类

来源:互联网 发布:u盘修复数据恢复 编辑:程序博客网 时间:2024/06/09 16:44

#Region "树类"

#Region "树型项目类"
Public Class 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() 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() As CTreeItem
   
Get
     
Return _ParentTreeItem
   
End Get
   
Set(ByVal Value As CTreeItem)
      _ParentTreeItem
= Value
   
End Set
 
End Property


 
Public Sub New()
   
Me.Items = New CTreeItemCollection(Me)
   
Me.OtherInfo = New COtherInfo
 
End Sub


 
Public ReadOnly 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() 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(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() As CTreeItem
   
Get
     
Return GetPrevOrNextTreeItem(False)
   
End Get
 
End Property


 
Public ReadOnly Property NextTreeItem() As CTreeItem
   
Get
     
Return GetPrevOrNextTreeItem(True)
   
End Get
 
End Property


 
Private strPath As String
 
Public 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() 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 CTreeItemCollection
 
Inherits CollectionBase

 
Public ParentTree As CTree
 
Public ParentTreeItem As CTreeItem

 
Public Sub New()
   
MyBase.New()
 
End Sub


 
Public Sub New(ByVal Parent As CTree)
   
MyBase.New()
   
Me.ParentTree = Parent
 
End Sub


 
Public Sub New(ByVal Parent As CTreeItem)
   
MyBase.New()
   
Me.ParentTreeItem = Parent
 
End Sub


 
Public 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(ByVal ItemIndex As Integer) As CTreeItem
   
Return MyBase.List.Item(ItemIndex)
 
End Function


 
Public Function IndexOf(ByVal Value As CTreeItem) As Integer
   
Return MyBase.List.IndexOf(Value)
 
End Function


 
Public 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(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(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 CTree

 
Public Items As CTreeItemCollection

 
Public Sub New()
   
Me.Items = New CTreeItemCollection(Me)
 
End Sub


 
Protected Overrides Sub Finalize()
   
MyBase.Finalize()
 
End Sub

End Class

#End Region

原创粉丝点击