http://blog.csdn.net/zengjiangyou/article/details/5251358
'-----------------------------------------------------------------
' 文 件 名:XtrasTreeList.vb
' 功能描述:XtraTreeList通用操作
' 编写人 :zengjiangyou 20090923
' 邮 箱 :[email protected]
' ----------------------------------------------------------------
Imports DevExpress.XtraTreeList.Nodes
Imports DevExpress.XtraTreeList.Columns
Imports DevExpress.XtraTreeList
Public Class XtrasTreeList
#Region "Column列操作"
''' <summary>
''' 设置焦点列
''' </summary>
''' <param name="treeList">控件</param>
''' <param name="columnCaption">焦点列名称</param>
''' <returns>成功与否</returns>
''' <remarks>zengjiangyou 20091015</remarks>
Public Shared Function SetFocuseColumn(ByRef treeList As DevExpress.XtraTreeList.TreeList, ByVal columnCaption As String) As DevExpress.XtraTreeList.Columns.TreeListColumn
If treeList Is Nothing Then
Exit Function
End If
Dim CurColumn As Columns.TreeListColumn = treeList.Columns.ColumnByFieldName(columnCaption)
If Not CurColumn Is Nothing Then
treeList.FocusedColumn = CurColumn
'获得焦点
treeList.Focus()
End If
Return CurColumn
End Function
''' <summary>
''' 固定列
''' </summary>
''' <param name="treeList">需要固定列的控件</param>
''' <param name="columnIndex">固定列索引(固定列数目)</param>
''' <returns>成功与否</returns>
''' <remarks>zengjiangyou 20091015</remarks>
Public Shared Function FixColumn(ByRef treeList As DevExpress.XtraTreeList.TreeList, ByVal columnIndex As Integer) As Boolean
Try
Dim i As Integer
For i = 0 To columnIndex - 1
treeList.Columns(i).Fixed = FixedStyle.Left
Next
Return True
Catch ex As Exception
Return False
End Try
End Function
''' <summary>
''' 实现编辑时(使用Enter键可以直接进入下一行)
''' </summary>
''' <param name="treeList">控件</param>
''' <param name="e">事件</param>
''' <returns></returns>
''' <remarks>zengjiangyou 20090923</remarks>
Public Shared Sub EditorKeyDown(ByVal treeList As DevExpress.XtraTreeList.TreeList, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.Enter Then
If treeList.FocusedColumn.Caption = "计算式" Then
treeList.MoveNextVisible()
treeList.Selection.Clear()
treeList.FocusedNode.Selected = True
End If
End If
End Sub
''' <summary>
''' 添加列
''' </summary>
''' <param name="caption">标题</param>
''' <param name="fieldName">绑定字段</param>
''' <param name="name">绑定名称</param>
''' <param name="Visible">是否可视</param>
''' <param name="Visible">是否只读</param>
''' <returns>列</returns>
''' <remarks>zengjiangyou 20090923</remarks>
Public Shared Function AddColumn(ByRef Column As DevExpress.XtraTreeList.Columns.TreeListColumn, _
ByVal caption As String, _
ByVal fieldName As String, _
ByVal name As String, _
ByVal Visible As String, _
Optional ByVal width As Integer = -1, _
Optional ByVal allowEdit As Boolean = True, _
Optional ByVal allowSort As Boolean = False, _
Optional ByVal allowMove As Boolean = False, _
Optional ByVal Alignment As String = "左对齐") As DevExpress.XtraTreeList.Columns.TreeListColumn
'标题
Column.Caption = caption
'绑定字段
Column.FieldName = fieldName
'绑定名称
Column.Name = name
'是否可以显示
Column.Visible = (Visible = "是")
'显示宽度
If width <> -1 Then
Column.Width = width
End If
'设置为不能排序
Column.OptionsColumn.AllowSort = allowSort
'设置列为不能移动
Column.OptionsColumn.AllowMove = allowMove
'设置列为不能编辑
Column.OptionsColumn.AllowEdit = allowEdit
'---2009.10.21 xiongguohua Add---
'解决工程量字段对齐设置无效的问题
Select Case Alignment
Case "左对齐"
Column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near
Case "居中"
Column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center
Case "右对齐"
Column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far
Case Else
Column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Default
End Select
'-------------------------------
Return Column
End Function
''' <summary>
''' 判断当前工程量是否可以复制(只要判断当前选中的行中既有父亲又有孩子行就不可用)
''' </summary>
''' <param name="treelist"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function SelectNodeIsSameLevel(ByVal treelist As DevExpress.XtraTreeList.TreeList) As Boolean
Dim i As Integer
Dim intCount As Integer = treelist.Selection.Count - 1
Dim intLevel As Integer = -1
If intCount > 0 Then
intLevel = treelist.Selection.Item(0).Level
ElseIf intCount = 0 Then
Return True
End If
For i = 1 To intCount
If (intLevel <> treelist.Selection.Item(i).Level) And (intLevel <> -1) Then
Return False
Exit For
End If
Next
Return True
End Function
''' <summary>
''' 判断当前工程量是否可以复制(只要判断当前选中的行中既有父亲又有孩子行就不可用)
''' </summary>
''' <param name="treelist"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function SelectChildAndParent(ByVal treelist As DevExpress.XtraTreeList.TreeList) As Boolean
SelectChildAndParent = True
Dim i As Integer
Dim j As Integer
Dim ParRow As DevExpress.XtraTreeList.Nodes.TreeListNode
Dim intCount As Integer
Dim intChildCount As Integer
intCount = treelist.Selection.Count - 1
For i = 0 To intCount
ParRow = treelist.Selection.Item(i)
If ParRow.HasChildren Then
intChildCount = ParRow.Nodes.Count - 1
For j = 0 To intChildCount
If IsSelected(ParRow.Nodes(j)) Then
SelectChildAndParent = False
Exit Function
End If
Next j
End If
Next i
End Function
''' <summary>
''' 判断当前记录行是否被选中(其本身和它的孩子中只要有一个被选中就返回True)
''' </summary>
''' <param name="Row"></param>
''' <returns></returns>
''' <remarks></remarks>
Private Shared Function IsSelected(ByVal Row As DevExpress.XtraTreeList.Nodes.TreeListNode) As Boolean
If Row.Selected Then
IsSelected = True
Exit Function
End If
Dim i As Integer
Dim intCount As Integer
Dim Selected As Boolean
intCount = Row.Nodes.Count - 1
For i = 0 To intCount
Selected = IsSelected(Row.Nodes(i))
If Selected = True Then
IsSelected = True
Exit Function
End If
Next i
IsSelected = False
End Function
#End Region
#Region "其他操作"
'''keyDown输入事件
Public Shared Sub TreeListKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Dim CurTreeList As TreeList = TryCast(sender, TreeList)
'如果是辅助键,则不需要开出编辑
If Not (e.KeyCode = 16 Or e.KeyCode = 17 Or e.KeyCode = Keys.Up Or e.KeyCode = Keys.Down Or e.KeyCode = Keys.Left Or e.KeyCode = Keys.Right) Then
If e.KeyCode = 13 And CurTreeList.FocusedNode IsNot Nothing Then
CurTreeList.MoveNext()
CurTreeList.Selection.Clear()
CurTreeList.FocusedNode.Selected = True
Else
CurTreeList.OptionsBehavior.Editable = True
CurTreeList.ShowEditor()
End If
End If
End Sub
''' <summary>
''' 获得当前控件焦点行的兄弟上一个兄弟节点
''' </summary>
''' <param name="treeList">控件对象</param>
''' <returns>兄弟节点</returns>
''' <remarks>ZENGJIANGYOU 20090930</remarks>
Public Shared Function GetNodeIndexInParentNode(ByRef treeList As DevExpress.XtraTreeList.TreeList) As Integer
Dim i As Integer
Dim intCount As Integer
Dim intIndex As Integer = -1
Dim CurFocuseNode As Nodes.TreeListNode
Dim CurParentNode As Nodes.TreeListNode
CurFocuseNode = treeList.FocusedNode
If Not CurFocuseNode Is Nothing Then
CurParentNode = CurFocuseNode.ParentNode
If Not CurParentNode Is Nothing Then
intCount = CurParentNode.Nodes.Count - 1
For i = 0 To intCount
If CurParentNode.Nodes(i).Equals(CurFocuseNode) Then
intIndex = i
Exit For
End If
Next
End If
End If
Return intIndex
End Function
''' <summary>
''' 获得当前控件焦点行的兄弟上一个兄弟节点
''' </summary>
''' <param name="treeList">控件对象</param>
''' <returns>兄弟节点</returns>
''' <remarks>ZENGJIANGYOU 20090930</remarks>
Public Shared Function GetNodeIndexInParentNode(ByRef treeList As DevExpress.XtraTreeList.TreeList, _
ByRef treeNode As DevExpress.XtraTreeList.Nodes.TreeListNode) As Integer
Dim i As Integer
Dim intCount As Integer
Dim intIndex As Integer = -1
If Not treeNode Is Nothing Then
If Not treeNode.ParentNode Is Nothing Then
intCount = treeNode.ParentNode.Nodes.Count - 1
For i = 0 To intCount
If treeNode.ParentNode.Nodes(i).Equals(treeNode) Then
intIndex = i
Exit For
End If
Next
Else
intCount = treeList.Nodes.Count
For i = 0 To intCount
If treeList.Nodes(i).Equals(treeNode) Then
intIndex = i
Exit For
End If
Next
End If
End If
Return intIndex
End Function
'''获得选中节点的对象
Public Shared Sub GetNodeObject(ByRef curNodes As DevExpress.XtraTreeList.Nodes.TreeListNodes, _
ByRef qtyList As List(Of ClsDataQuantity))
Dim i As Integer
Dim intCount As Integer = curNodes.Count - 1
Dim CurTmpNode As DevExpress.XtraTreeList.Nodes.TreeListNode = Nothing
For i = intCount To 0 Step -1
'获得节点
CurTmpNode = curNodes(i)
If curNodes(i).Selected Then
qtyList.Add(CurTmpNode.GetValue("DataObject"))
End If
If CurTmpNode.HasChildren Then
Call GetNodeObject(CurTmpNode.Nodes, qtyList)
End If
Next i
End Sub
''' <summary>
''' 将树目录控件中的选中行转换成工程量列表
''' </summary>
''' <param name="treeList">控件</param>
''' <returns>工程量列表</returns>
''' <remarks>20090929 修改</remarks>
Public Shared Function TransTreeNodesToQtyList(ByRef treeList As DevExpress.XtraTreeList.TreeList) As List(Of ClsDataQuantity)
'Dim i As Integer
'Dim intCount As Integer
Dim CurQtyList As New List(Of ClsDataQuantity)
Try
'获得选中节点
Call GetNodeObject(treeList.Nodes, CurQtyList)
'intCount = treeList.Selection.Count - 1
'intCount = treeList.AllNodesCount - 1
'For i = 0 To intCount
' If treeList.get(intCount).Selected Then
' CurQtyList.Add(treeList.GetNodeByVisibleIndex(intCount).GetValue("DataObject"))
' End If
'Next
'For i = intCount To 0 Step -1
' 'CurQtyList.Add(treeList.Selection.Item(i).GetValue("DataObject"))
'Next
'Dim num As Integer = treeList.GetNodeIndex(treeList.Selection.Item(i))
'Dim k As Integer = 0
'Dim j As Integer = 0
'Dim tmp As ClsDataQuantity
'Dim list As New Dictionary(Of Integer, Object)
'For k = 0 To intCount - 1
' list.Add(treeList.GetNodeIndex(treeList.Selection.Item(k)), treeList.Selection.Item(k).GetValue("DataObject"))
'Next
'For k = 0 To intCount - 1
' For j = k + 1 To intCount
' If treeList.GetNodeIndex(treeList.Selection.Item(k)) > treeList.GetNodeIndex(treeList.Selection.Item(j)) Then
' tmp = list(k)
' list(k) = list(j)
' list(j) = tmp
' End If
' Next j
'Next k
''对数据进行排序,防止选择顺序错乱
'For Each key As Integer In list.Keys
' CurQtyList.Add(list(key))
'Next
'Dim CurQty As ClsDataQuantity
'CurQtyList
Catch ex As Exception
gSystem.ReportErr.PopupMessage("XtrasTreeList: " & ex.Message)
End Try
Return CurQtyList
End Function
''' <summary>
''' 刷新TreeList控件
''' </summary>
''' <param name="treeList">设置焦点的控件</param>
''' <remarks>zengjiangyou 20091014</remarks>
Public Shared Sub Refresh(ByRef treeList As DevExpress.XtraTreeList.TreeList)
If Not treeList Is Nothing Then
treeList.Refresh()
End If
End Sub
''' <summary>
''' 设置控件的焦点Node
''' </summary>
''' <param name="treeList">设置焦点的控件</param>
''' <param name="treeNode">焦点Node</param>
''' <returns>焦点Node</returns>
''' <remarks>zengjiangyou 20091014</remarks>
Public Shared Function SetFouceNode(ByRef treeList As DevExpress.XtraTreeList.TreeList, _
ByRef treeNode As DevExpress.XtraTreeList.Nodes.TreeListNode) As Nodes.TreeListNode
On Error Resume Next
'设置当前焦点
If Not treeNode Is Nothing Then
Dim NothingNode As DevExpress.XtraTreeList.Nodes.TreeListNode = Nothing
treeList.FocusedNode = NothingNode
treeList.FocusedNode = treeNode
treeList.Selection.Clear()
treeList.Selection.Add(treeNode)
End If
Return treeNode
End Function
''' <summary>
''' 设置控件的焦点Node
''' </summary>
''' <param name="treeList">设置焦点的控件</param>
''' <param name="treeNode">焦点Node</param>
''' <returns>焦点Node</returns>
''' <remarks>zengjiangyou 20091014</remarks>
Public Shared Function SetFouceNode(ByRef treeList As DevExpress.XtraTreeList.TreeList, _
ByRef treeNode As DevExpress.XtraTreeList.Nodes.TreeListNode, _
ByRef causeSelectionChanged As Boolean) As Nodes.TreeListNode
On Error Resume Next
'设置当前焦点
If Not treeNode Is Nothing Then
If causeSelectionChanged Then
Dim NothingNode As DevExpress.XtraTreeList.Nodes.TreeListNode = Nothing
treeList.FocusedNode = NothingNode
End If
treeList.FocusedNode = treeNode
treeList.Selection.Clear()
treeList.Selection.Add(treeNode)
End If
Return treeNode
End Function
''' <summary>
''' 变换控件的焦点Node(去掉原来焦点,重新设置控件焦点为当前节点)
''' </summary>
''' <param name="treeList">设置焦点的控件</param>
''' <param name="treeNode">焦点Node</param>
''' <returns>焦点Node</returns>
''' <remarks>zengjiangyou 20091014</remarks>
Public Shared Function ChangeFouceNode(ByRef treeList As DevExpress.XtraTreeList.TreeList, _
ByRef treeNode As DevExpress.XtraTreeList.Nodes.TreeListNode) As Nodes.TreeListNode
'设置当前焦点
If Not treeNode Is Nothing Then
treeList.FocusedNode = Nothing
treeList.FocusedNode = treeNode
treeList.Selection.Clear()
treeList.Selection.Add(treeNode)
End If
Return treeNode
End Function
''' <summary>
''' 设置第一个节点获得焦点
''' </summary>
''' <param name="treeList">设置焦点的控件</param>
''' <param name="FocuseNodeIndex">焦点Node索引</param>
''' <returns>焦点Node</returns>
''' <remarks>zengjiangyou 20091014</remarks>
Public Shared Function SetFristNodeGetFouce(ByRef treeList As DevExpress.XtraTreeList.TreeList) As DevExpress.XtraTreeList.Nodes.TreeListNode
'设置当前焦点
If treeList.Nodes.Count = 1 Then
treeList.FocusedNode = treeList.Nodes.FirstNode
treeList.Selection.Clear()
treeList.Selection.Add(treeList.Nodes.FirstNode)
Return treeList.Nodes.FirstNode
Else
Return Nothing
End If
End Function
'释放多选焦点
Public Shared Sub RefreshFocuse(ByVal TreeList As DevExpress.XtraTreeList.TreeList, _
ByVal e As System.EventArgs, _
ByVal IsPressCtrl As Boolean, _
ByVal mousePosition As System.Drawing.Point)
If Not IsPressCtrl Then
'获得当前鼠标的位置
Dim pt As System.Drawing.Point = TreeList.PointToClient(mousePosition)
'获得鼠标所在位置 Treelist焦点信息
Dim info As TreeListHitInfo = TreeList.CalcHitInfo(pt)
'如果多选,则清除多选操作
Dim CurNode As DevExpress.XtraTreeList.Nodes.TreeListNode
'如果焦点是单元格,则设置焦点信息为当前单元格
If (info.HitInfoType = HitInfoType.Cell) Then
CurNode = TreeList.FocusedNode
If Not CurNode Is Nothing Then
'如果多选,则清除多选操作
If TreeList.Selection.Count > 1 Then
TreeList.Selection.Clear()
End If
TreeList.FocusedNode = Nothing
TreeList.FocusedNode = CurNode
TreeList.FocusedNode.Selected = True
End If
End If
End If
End Sub
''' <summary>
''' 设置第一个节点获得焦点
''' </summary>
''' <param name="treeList">设置焦点的控件</param>
''' <param name="FocuseNodeIndex">焦点Node索引</param>
''' <returns>焦点Node</returns>
''' <remarks>zengjiangyou 20091014</remarks>
Public Shared Sub SetLeftMouseButtonState(ByRef treeList As TreeList, _
ByVal e As System.Windows.Forms.MouseEventArgs, _
ByVal mousePosition As System.Drawing.Point)
Try
'获得当前鼠标的位置
Dim pt As System.Drawing.Point = treeList.PointToClient(mousePosition)
'获得鼠标所在位置 Treelist焦点信息
Dim info As TreeListHitInfo = treeList.CalcHitInfo(pt)
'如果焦点是单元格,则设置焦点信息为当前单元格
If Not (info.HitInfoType = HitInfoType.Cell) Then
Dim CurNode As DevExpress.XtraTreeList.Nodes.TreeListNode
CurNode = treeList.FocusedNode
If Not CurNode Is Nothing Then
'如果多选,则清除多选操作
If treeList.Selection.Count > 1 Then
treeList.Selection.Clear()
End If
treeList.FocusedNode = Nothing
treeList.FocusedNode = CurNode
treeList.FocusedNode.Selected = True
End If
Else
'If treeList.Selection.Count > 1 Then
' 'debug.print(info.Node.Selected)
' 'debug.print(info.Node.Focused)
' '如果是多选,则去掉多选,选择当前行
' Dim CurNode As DevExpress.XtraTreeList.Nodes.TreeListNode
' CurNode = treeList.FocusedNode
' If Not CurNode Is Nothing Then
' treeList.FocusedNode = Nothing
' treeList.FocusedNode = CurNode
' treeList.Selection.Clear()
' treeList.FocusedNode.Selected = True
' End If
'End If
End If
Catch ex As Exception
'debug.print("")
End Try
End Sub
''' <summary>
''' 图片状态改变事件(点击图片控件会失去焦点)
''' </summary>
''' <param name="treeList">树控件</param>
''' <param name="e">鼠标事件</param>
''' <remarks>zengjiangyou 20091016</remarks>
Public Shared Sub StateImageClick(ByVal sender As Object, ByVal e As DevExpress.XtraTreeList.NodeClickEventArgs)
sender.FocusedNode = e.Node
End Sub
''' <summary>
''' 变换右键切换时的焦点行
''' </summary>
''' <param name="treeList">树控件</param>
''' <param name="e">鼠标事件</param>
''' <param name="mousePosition">当前鼠标的位置</param>
''' <remarks>zengjiangyou 20091016</remarks>
Public Shared Function SetMouseUpFocuse(ByRef treeList As TreeList, _
ByVal e As System.Windows.Forms.MouseEventArgs, _
ByVal mousePosition As System.Drawing.Point) As Boolean
Try
If e.Button = Windows.Forms.MouseButtons.Right Then
'获得当前鼠标的位置
Dim pt As System.Drawing.Point = treeList.PointToClient(mousePosition)
'获得鼠标所在位置 Treelist焦点信息
Dim info As TreeListHitInfo = treeList.CalcHitInfo(pt)
'如果没有记录,弹右键盘菜单
If treeList.Nodes.Count = 0 Then
Return True
End If
'如果焦点是单元格,则设置焦点信息为当前单元格
If (info.HitInfoType = HitInfoType.Cell) Then
treeList.FocusedNode = info.Node
'如果控件是多选
If treeList.OptionsSelection.MultiSelect Then
If Not treeList.Selection.Contains(treeList.FocusedNode) Then
treeList.Selection.Clear()
treeList.Selection.Add(treeList.FocusedNode)
End If
End If
Return True
Else
Return False
End If
End If
Catch ex As Exception
gSystem.ReportErr.PopupMessage("TreeListBackout: " & ex.Message)
End Try
End Function
#End Region
#Region "Node节点操作"
#Region "上移、下移、左移、右移操作是否可用"
''' <summary>
''' Node上移是否可用
''' </summary>
''' <param name="treeList">控件</param>
''' <returns>TRUE OR FALSE</returns>
''' <remarks>ZENGJIANGYOU 20090930</remarks>
Public Shared Function MoveUpEnabled(ByRef treeList As DevExpress.XtraTreeList.TreeList) As Boolean
If treeList Is Nothing OrElse treeList.FocusedNode Is Nothing Then Return False
Return treeList.FocusedNode.PrevNode IsNot Nothing
End Function
''' <summary>
''' Node下移是否可用
''' </summary>
''' <param name="treeList">控件</param>
''' <returns>TRUE OR FALSE</returns>
''' <remarks>ZENGJIANGYOU 20090930</remarks>
Public Shared Function MoveDownEnabled(ByRef treeList As DevExpress.XtraTreeList.TreeList) As Boolean
If treeList Is Nothing OrElse treeList.FocusedNode Is Nothing Then Return False
Return treeList.FocusedNode.NextNode IsNot Nothing
End Function
''' <summary>
''' Node左移是否可用
''' </summary>
''' <param name="treeList">控件</param>
''' <returns>TRUE OR FALSE</returns>
''' <remarks>ZENGJIANGYOU 20090930</remarks>
Public Shared Function MoveLeftEnabled(ByRef treeList As DevExpress.XtraTreeList.TreeList) As Boolean
If treeList Is Nothing OrElse treeList.FocusedNode Is Nothing Then Return False
'存在父级节点则可以左移
Return treeList.FocusedNode.ParentNode IsNot Nothing
End Function
''' <summary>
''' Node右移是否可用
''' </summary>
''' <param name="treeList">控件</param>
''' <returns>TRUE OR FALSE</returns>
''' <remarks>ZENGJIANGYOU 20090930</remarks>
Public Shared Function MoveRightEnabled(ByRef treeList As DevExpress.XtraTreeList.TreeList) As Boolean
If treeList Is Nothing OrElse treeList.FocusedNode Is Nothing Then Return False
Return treeList.FocusedNode.PrevNode IsNot Nothing
End Function
#End Region
#Region "获得兄弟节点"
''' <summary>
''' 获得当前控件焦点行的兄弟上一个兄弟节点
''' </summary>
''' <param name="treeList">控件对象</param>
''' <returns>兄弟节点</returns>
''' <remarks>ZENGJIANGYOU 20090930</remarks>
Public Shared Function GetUpBrotherNode(ByRef treeList As DevExpress.XtraTreeList.TreeList) As DevExpress.XtraTreeList.Nodes.TreeListNode
If treeList.FocusedNode Is Nothing Then
Return Nothing
Else
Return treeList.FocusedNode.PrevNode
End If
End Function
''' <summary>
''' 获得当前控件焦点行是否存在兄弟节点
''' </summary>
''' <param name="treeList">控件对象</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function HasUpBrotherNode(ByRef treeList As DevExpress.XtraTreeList.TreeList) As Boolean
If treeList.FocusedNode Is Nothing Then
Return False
Else
Return (Not treeList.FocusedNode Is Nothing)
End If
End Function
#End Region
#Region "节点插入"
''' <summary>
''' 插入节点
''' </summary>
''' <param name="treelist">树控件</param>
''' <returns>当前插入的节点</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function InsertNode(ByVal treelist As DevExpress.XtraTreeList.TreeList) As TreeListNode
'定义当前要添加的新节点
Dim newNode As TreeListNode = Nothing
'定义当前新节点的父级节点
Dim ParentNode As TreeListNode = Nothing
If Not treelist.FocusedNode Is Nothing Then
ParentNode = treelist.FocusedNode.ParentNode
'添加最顶级节点
newNode = treelist.AppendNode(Nothing, ParentNode)
newNode.Nodes.Add(newNode)
newNode.Nodes.Add(newNode)
'将新节点调整到指定位置
treelist.SetNodeIndex(newNode, treelist.GetNodeIndex(treelist.FocusedNode) + 1)
End If
Return newNode
End Function
''' <summary>
''' 插入的节点
''' </summary>
''' <param name="treelist">树控件</param>
''' <param name="index">节点插入的位置</param>
''' <returns>插入的节点</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function InsertNode(ByVal treelist As DevExpress.XtraTreeList.TreeList, _
ByVal index As Integer) As TreeListNode
'定义当前要添加的新节点
Dim newNode As TreeListNode = Nothing
'定义当前新节点的父级节点
Dim ParentNode As TreeListNode = Nothing
Try
If Not treelist.FocusedNode Is Nothing Then
ParentNode = treelist.FocusedNode.ParentNode
'添加最顶级节点
newNode = treelist.AppendNode(Nothing, ParentNode)
'将新节点调整到指定位置
treelist.SetNodeIndex(newNode, index)
End If
Catch ex As Exception
End Try
Return newNode
End Function
''' <summary>
''' 插入子节点
''' </summary>
''' <param name="treelist">树控件</param>
''' <returns>插入Node</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function InsertChildNode(ByVal treelist As DevExpress.XtraTreeList.TreeList) As TreeListNode
'定义当前要添加的新节点
Dim newNode As TreeListNode = Nothing
Try
If Not treelist.FocusedNode Is Nothing Then
'添加最顶级节点
newNode = treelist.AppendNode(Nothing, treelist.FocusedNode)
End If
Catch ex As Exception
MsgBox("提示", MsgBoxStyle.OkOnly, "InsertChildNode")
End Try
Return newNode
End Function
''' <summary>
''' 插入子节点
''' </summary>
''' <param name="treelist">树控件</param>
''' <param name="index">插入子节点的位置</param>
''' <returns>插入的Node</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function InsertChildNode(ByVal treelist As DevExpress.XtraTreeList.TreeList, _
ByVal index As Integer) As TreeListNode
'定义当前要添加的新节点
Dim newNode As TreeListNode = Nothing
Try
If Not treelist.FocusedNode Is Nothing Then
'添加最顶级节点
newNode = treelist.AppendNode(Nothing, treelist.FocusedNode)
End If
'将新节点调整到指定位置
treelist.SetNodeIndex(newNode, index)
Catch ex As Exception
MsgBox("提示", MsgBoxStyle.OkOnly, "InsertChildNode")
End Try
Return newNode
End Function
''' <summary>
''' 在TreeList的TreeNode节点下,插入子级
''' </summary>
''' <param name="treelist">要插入节点TreeList控件</param>
''' <param name="treeNode">要插入节点TreeNode对象</param>
''' <param name="index">要插入节点索引</param>
''' <returns>插入后的节点</returns>
''' <remarks>zengjiangyou</remarks>
Public Shared Function InsertChildNode(ByRef treelist As DevExpress.XtraTreeList.TreeList, _
ByRef treeNode As DevExpress.XtraTreeList.Nodes.TreeListNode, _
ByRef index As Integer, _
ByRef bindObject As Object) As TreeListNode
'定义当前要添加的新节点
Dim newNode As TreeListNode = Nothing
Dim intNodeIndex As Integer = 0
Try
If Not treeNode Is Nothing Then
'添加最顶级节点
newNode = treelist.AppendNode(Nothing, treeNode)
treeNode.Expanded = True
If Not index > treeNode.Nodes.Count Then
intNodeIndex = treelist.GetNodeIndex(treeNode.Nodes(index))
'将新节点调整到指定位置
treelist.SetNodeIndex(newNode, intNodeIndex)
End If
Else
'添加最顶级节点()
newNode = treelist.AppendNode(Nothing, treeNode)
'将新节点调整到指定位置
If index <= treelist.Nodes.Count Then
treelist.SetNodeIndex(newNode, index)
End If
End If
Return newNode
Catch ex As Exception
MsgBox("提示", MsgBoxStyle.OkOnly, "InsertChildNode")
End Try
Return newNode
End Function
''' <summary>
''' 在TreeList的TreeNode节点下,插入子级
''' </summary>
''' <param name="treelist">要插入节点TreeList控件</param>
''' <param name="treeNode">要插入节点TreeNode对象</param>
''' <returns>插入后的节点</returns>
''' <remarks>zengjiangyou</remarks>
Public Shared Function InsertChildNode(ByVal treelist As DevExpress.XtraTreeList.TreeList, _
ByVal treeNode As DevExpress.XtraTreeList.Nodes.TreeListNode) As TreeListNode
'定义当前要添加的新节点
Dim newNode As TreeListNode = Nothing
Try
If Not treeNode Is Nothing Then
'添加最顶级节点
newNode = treelist.AppendNode(Nothing, treeNode)
End If
Catch ex As Exception
MsgBox("提示", MsgBoxStyle.OkOnly, "InsertChildNode")
End Try
Return newNode
End Function
''' <summary>
''' 将Node插入到指定节点
''' </summary>
''' <param name="treelist">树控件</param>
''' <param name="index">树控件索引</param>
''' <param name="newNode">Node对象</param>
''' <returns>插入Node对象</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function InsertNode(ByVal treelist As DevExpress.XtraTreeList.TreeList, _
ByVal index As Integer, ByRef newNode As TreeListNode) As TreeListNode
'定义当前要添加的新节点
Dim CurNewNode As TreeListNode = Nothing
'定义当前新节点的父级节点
Dim ParentNode As TreeListNode = Nothing
Try
If Not treelist.FocusedNode Is Nothing Then
ParentNode = treelist.FocusedNode.ParentNode
'添加最顶级节点
CurNewNode = treelist.AppendNode(Nothing, ParentNode)
'将新节点调整到指定位置
treelist.SetNodeIndex(CurNewNode, index)
'将指定节点插入
CurNewNode = newNode
End If
Catch ex As Exception
End Try
Return newNode
End Function
#End Region
#Region "删除节点"
''' <summary>
''' 删除单个节点
''' </summary>
''' <param name="treelist">树目录控件</param>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Sub DeleteNode(ByVal treelist As DevExpress.XtraTreeList.TreeList)
If Not treelist.FocusedNode Is Nothing Then
treelist.DeleteNode(treelist.FocusedNode)
End If
End Sub
''' <summary>
''' 删除指定节点
''' </summary>
''' <param name="treelist">树目录控件</param>
''' <param name="treeNode">树节点</param>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Sub DeleteNode(ByRef treelist As DevExpress.XtraTreeList.TreeList, _
ByRef treeNode As DevExpress.XtraTreeList.Nodes.TreeListNode)
If Not treeNode Is Nothing Then
'思路:先删除子节点,然后再删除父级节点
'For Each node As DevExpress.XtraTreeList.Nodes.TreeListNode In treeNode.Nodes
' 'treeNode.Nodes.Remove(node)
' treelist.DeleteNode(node)
'Next
'将要删除的节点设置为不可见
'
'先去掉孩子节点,然后在删除节点
Call CollapseChildNode(treeNode)
If Not treeNode.ParentNode Is Nothing Then
treeNode.Visible = False
'If treeNode.ParentNode.Nodes.Count = 1 Then
' 'treelist.IsUnboundMode
' 'treeNode.ParentNode.Nodes.RemoveAt(0)
'End If
End If
treelist.DeleteNode(treeNode)
End If
End Sub
''' <summary>
''' 收缩孩子节点
''' </summary>
''' <param name="treeNode">树节点</param>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Sub CollapseChildNode(ByRef treeNode As DevExpress.XtraTreeList.Nodes.TreeListNode)
If Not treeNode Is Nothing Then
'treeNode.Expanded = False
treeNode.HasChildren = False
End If
For Each CurNode As Nodes.TreeListNode In treeNode.Nodes
Call CollapseChildNode(CurNode)
Next
End Sub
''' <summary>
''' 删除当前节点的所有子节点
''' </summary>
''' <param name="treelist">目录树</param>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Sub DeleteAllChildNode(ByVal treelist As DevExpress.XtraTreeList.TreeList)
Dim CurFocuseNode As TreeListNode = treelist.FocusedNode
Dim intCount As Integer = 0
Dim i As Integer
If Not CurFocuseNode Is Nothing Then
If CurFocuseNode.HasChildren Then
'循环删除当前节点的子节点
intCount = CurFocuseNode.Nodes.Count
For i = intCount - 1 To 0 Step -1
treelist.DeleteNode(CurFocuseNode.Nodes(i))
Next
End If
End If
End Sub
''' <summary>
''' 删除选中节点
''' </summary>
''' <param name="treelist">树控件</param>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Sub DeleteSelectionNode(ByVal treelist As DevExpress.XtraTreeList.TreeList)
If treelist.Selection.Count > 0 Then
treelist.DeleteSelectedNodes()
End If
End Sub
#End Region
#Region "节点移动"
''' <summary>
''' 节点上移
''' </summary>
''' <param name="treelist">树控件</param>
''' <param name="index">移动节点位置</param>
''' <returns>移动后节点</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function MoveUp(ByVal treelist As DevExpress.XtraTreeList.TreeList, ByVal index As Integer) As TreeListNode
Return Nothing
End Function
''' <summary>
''' 节点上移
''' </summary>
''' <param name="treelist">树控件</param>
''' <returns>移动后节点</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function MoveUp(ByRef treelist As DevExpress.XtraTreeList.TreeList) As TreeListNode
'定义焦点行节点
Dim CurFocuseNode As TreeListNode = Nothing
Dim CurPreNode As TreeListNode = Nothing
Try
CurFocuseNode = treelist.FocusedNode
If Not CurFocuseNode Is Nothing Then
CurPreNode = CurFocuseNode.PrevNode
If Not CurPreNode Is Nothing Then
'将新节点调整到指定位置
treelist.SetNodeIndex(CurFocuseNode, treelist.GetNodeIndex(CurPreNode))
End If
End If
Catch ex As Exception
End Try
Return CurFocuseNode
End Function
''' <summary>
''' 节点下移
''' </summary>
''' <param name="treelist">树控件</param>
''' <returns>移动后节点</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function MoveDown(ByVal treelist As DevExpress.XtraTreeList.TreeList) As TreeListNode
'定义焦点行节点
Dim CurFocuseNode As TreeListNode = Nothing
Dim CurNextNode As TreeListNode = Nothing
Try
CurFocuseNode = treelist.FocusedNode
If Not CurFocuseNode Is Nothing Then
CurNextNode = CurFocuseNode.NextNode
If Not CurNextNode Is Nothing Then
'将新节点调整到指定位置
treelist.SetNodeIndex(CurFocuseNode, treelist.GetNodeIndex(CurNextNode))
End If
End If
Catch ex As Exception
End Try
Return CurFocuseNode
End Function
''' <summary>
''' 节点左移(删除前先对对象进行操作,防止对象被修改(通过虚拟加载的节点,删除时候对象会被删除))
''' </summary>
''' <param name="treelist">树控件</param>
''' <returns>移动后节点</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Function MoveLeft(ByVal treelist As DevExpress.XtraTreeList.TreeList) As TreeListNode
Dim CurFocuseNode As TreeListNode = treelist.FocusedNode
Dim CurFocuseCloneNode As TreeListNode = treelist.FocusedNode.Clone
Dim CurParentNode As TreeListNode = Nothing
Dim CurNewNode As TreeListNode = Nothing
Try
If Not CurFocuseNode Is Nothing Then
CurParentNode = treelist.FocusedNode.ParentNode.ParentNode
Dim CurObject As ClsDataQuantity = CurFocuseNode.GetValue("DataObject")
Dim CurIndex As Integer = XtrasTreeList.GetNodeIndexInParentNode(treelist, treelist.FocusedNode.ParentNode)
'删除节点
Call XtrasTreeList.DeleteNode(treelist, CurFocuseNode)
'添加节点
'CurNewNode = CommQuantityEdit.LoadOneCataLog(treelist, CurParentNode, CurObject, CurIndex + 1)
'设置焦点
Call XtrasTreeList.SetFouceNode(treelist, CurNewNode)
End If
Catch ex As Exception
'debug.print("MoveLeft")
End Try
Return CurParentNode
End Function
''' <summary>
''' 节点左移(先删除节点,然后插入当前节点的前一个节点 ,先操作对象然后 执行此操作)
''' </summary>
''' <param name="treelist">树控件</param>
''' <returns>移动后节点</returns>
''' <remarks>zengjiangyou 20091012</remarks>
Public Shared Sub MoveRight(ByVal treelist As DevExpress.XtraTreeList.TreeList)
Dim CurFocuseNode As TreeListNode = treelist.FocusedNode
Dim CurParentNode As TreeListNode = Nothing
Dim CurNewNode As TreeListNode = Nothing
Try
If Not CurFocuseNode Is Nothing Then
Dim CurObject As ClsDataQuantity = CurFocuseNode.GetValue("DataObject")
CurParentNode = treelist.FocusedNode.PrevNode
'删除节点
Call XtrasTreeList.DeleteNode(treelist, CurFocuseNode)
'添加节点
'CurNewNode = CommQuantityEdit.LoadOneCataLog(treelist, CurParentNode, CurObject, CurParentNode.Nodes.Count)
'设置焦点
Call XtrasTreeList.SetFouceNode(treelist, CurNewNode)
End If
Catch ex As Exception
'debug.print("MoveLeft")
End Try
'这种可能存在对象被串改问题
'If Not treelist.FocusedNode Is Nothing Then
' treelist.MoveNode(treelist.FocusedNode, treelist.FocusedNode.PrevNode)
'End If
'Return treelist.FocusedNode
End Sub
#End Region
''' <summary>
''' 移动到下一个节点
''' </summary>
''' <param name="treeList">树控件</param>
''' <remarks></remarks>
Public Shared Sub ShowNextNode(ByVal treeList As DevExpress.XtraTreeList.TreeList)
If treeList.FocusedNode Is Nothing Then
Exit Sub
End If
Dim NextNode As DevExpress.XtraTreeList.Nodes.TreeListNode = TreeList.FocusedNode.NextNode
If Not NextNode Is Nothing Then
XtrasTreeList.SetFouceNode(treeList, NextNode)
End If
End Sub
''' <summary>
''' 移动到下上一个节点
''' </summary>
''' <param name="treeList"></param>
''' <remarks></remarks>
Public Shared Sub ShowPreNode(ByVal treeList As DevExpress.XtraTreeList.TreeList)
If treeList.FocusedNode Is Nothing Then
Exit Sub
End If
Dim PreNode As DevExpress.XtraTreeList.Nodes.TreeListNode = treeList.FocusedNode.PrevNode
If Not PreNode Is Nothing Then
XtrasTreeList.SetFouceNode(treeList, PreNode)
End If
End Sub
#End Region
End Class