如何在LISTVIEW控件中上下移动项目(VFP)
001: FUNCTION MoveListItem
002: *-- 功能:如何在LISTVIEW控件中上下移动项目(VFP)
003: *-- 作者:红虎
004: *-- 参数:针对的LISTVIEW控件,以及方向( 1=向下,-1=向上,其他参数则返回)
005: *-- 返回:无
006: LPARAMETERS toListView as MSComctlLib.ListView, tnArrow as Integer
007:
008: LOCAL loList as MSComctlLib.ListView
009: loList = toListView
010:
011: LOCAL loItem as MSComctlLib.ListItem
012: LOCAL loNewItem as MSComctlLib.ListItem
013:
014: *-- 当前LISTVIEW选择的项目
015: loItem = loList.SelectedItem
016:
017: *-- 判断选择的项目
018: IF ISNULL(loItem)
019: RETURN
020: ENDIF
021:
022: *-- 判断参数是否为1或者-1
023: IF TYPE("tnArrow") # "N"
024: tnArrow = 0
025: ENDIF
026: DO CASE
027: CASE tnArrow = 1 && 向下
028: IF loItem.Index = loList.ListItems.Count
029: ??CHR(7)
030: RETURN
031: ENDIF
032: CASE tnArrow = -1 && 向上
033: IF loItem.Index = 1
034: ??CHR(7)
035: RETURN
036: ENDIF
037: OTHERWISE
038: ??CHR(7)
039: RETURN
040: ENDCASE
041:
042: *-- 定义项目所需变量
043: LOCAL laSubListItemText(1) As String
044: LOCAL lnTotalSubItems As Integer
045: LOCAL n As Integer
046: LOCAL lnItemIndex As Integer, ;
047: lcItemKey As String, ;
048: lcItemText As String, ;
049: lcItemTag As String, ;
050: luSmallIcon As Variant,;
051: llChecked as Boolean
052:
053: *-- 获取所选择的项目的数据
054: With loItem
055: lnItemIndex = .Index + tnArrow
056: lcItemKey = .Key
057: lcItemText = .Text
058: lcItemTag = .Tag
059: luSmallIcon = .SmallIcon
060: lnTotalSubItems = .ListSubItems.Count
061: llChecked = .Checked
062:
063: LOCAL laSubListItemText(lnTotalSubItems) As String
064: For n = 1 To lnTotalSubItems
065: laSubListItemText(n) = .ListSubItems(n)
066: Next
067: ENDWITH
068:
069: *-- 获取后将该项目删除
070: loList.ListItems.Remove(loItem.Index)
071:
072: *-- 添加新的项目,并指定其索引值
073: loNewItem = loList.ListItems.Add(lnItemIndex, lcItemKey, lcItemText, , luSmallIcon)
074:
075: *-- 根据原先所选取的项目大数据对新的项目赋值
076: With loNewItem
077: .Tag = lcItemTag
078: For n = 1 To lnTotalSubItems
079: .ListSubItems.Add (, , laSubListItemText(n))
080: Next
081: .Selected = .T.
082: .Checked = llChecked
083: .EnsureVisible()
084: EndWith
085:
086: loList.SetFocus()
087:
088: ENDFUNC
001: FUNCTION MoveListItem
002: *-- 功能:如何在LISTVIEW控件中上下移动项目(VFP)
003: *-- 作者:红虎
004: *-- 参数:针对的LISTVIEW控件,以及方向( 1=向下,-1=向上,其他参数则返回)
005: *-- 返回:无
006: LPARAMETERS toListView as MSComctlLib.ListView, tnArrow as Integer
007:
008: LOCAL loList as MSComctlLib.ListView
009: loList = toListView
010:
011: LOCAL loItem as MSComctlLib.ListItem
012: LOCAL loNewItem as MSComctlLib.ListItem
013:
014: *-- 当前LISTVIEW选择的项目
015: loItem = loList.SelectedItem
016:
017: *-- 判断选择的项目
018: IF ISNULL(loItem)
019: RETURN
020: ENDIF
021:
022: *-- 判断参数是否为1或者-1
023: IF TYPE("tnArrow") # "N"
024: tnArrow = 0
025: ENDIF
026: DO CASE
027: CASE tnArrow = 1 && 向下
028: IF loItem.Index = loList.ListItems.Count
029: ??CHR(7)
030: RETURN
031: ENDIF
032: CASE tnArrow = -1 && 向上
033: IF loItem.Index = 1
034: ??CHR(7)
035: RETURN
036: ENDIF
037: OTHERWISE
038: ??CHR(7)
039: RETURN
040: ENDCASE
041:
042: *-- 定义项目所需变量
043: LOCAL laSubListItemText(1) As String
044: LOCAL lnTotalSubItems As Integer
045: LOCAL n As Integer
046: LOCAL lnItemIndex As Integer, ;
047: lcItemKey As String, ;
048: lcItemText As String, ;
049: lcItemTag As String, ;
050: luSmallIcon As Variant,;
051: llChecked as Boolean
052:
053: *-- 获取所选择的项目的数据
054: With loItem
055: lnItemIndex = .Index + tnArrow
056: lcItemKey = .Key
057: lcItemText = .Text
058: lcItemTag = .Tag
059: luSmallIcon = .SmallIcon
060: lnTotalSubItems = .ListSubItems.Count
061: llChecked = .Checked
062:
063: LOCAL laSubListItemText(lnTotalSubItems) As String
064: For n = 1 To lnTotalSubItems
065: laSubListItemText(n) = .ListSubItems(n)
066: Next
067: ENDWITH
068:
069: *-- 获取后将该项目删除
070: loList.ListItems.Remove(loItem.Index)
071:
072: *-- 添加新的项目,并指定其索引值
073: loNewItem = loList.ListItems.Add(lnItemIndex, lcItemKey, lcItemText, , luSmallIcon)
074:
075: *-- 根据原先所选取的项目大数据对新的项目赋值
076: With loNewItem
077: .Tag = lcItemTag
078: For n = 1 To lnTotalSubItems
079: .ListSubItems.Add (, , laSubListItemText(n))
080: Next
081: .Selected = .T.
082: .Checked = llChecked
083: .EnsureVisible()
084: EndWith
085:
086: loList.SetFocus()
087:
088: ENDFUNC