_GUICtrlListView_SimpleSort_這函數排序無法將原始值保留)(已解決)
本帖最后由 yohoboy 于 2025-11-5 00:09 编辑各位大神您好
目前嘗試使用_GUICtrlListView_SimpleSort這函數用來排序,發覺使用排序後,如果前面欄位為0都會去掉
例如: 原始值:000001排序後:1 , 而前面的5個0 因排序自動刪除,因此如何能讓排序上,不受影響,讀取原始值再進行排序(保留原始資料格式)?
詳附件資料
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <WinAPI.au3>
#include <GUIEdit.au3>
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>
#include <FontConstants.au3>
#include <ButtonConstants.au3>
Opt("TrayIconHide", 0) ;0 = 顯示托盤圖標, 1 = 隱藏托盤圖標
Opt('MustDeclareVars', 1) ;0 = 變量不需預先聲明, 1 = 變量必需預先聲明
Opt("GUICloseOnESC", 1) ;0 = 點擊 Esc 鍵不關閉1 = 點擊 Esc 鍵關閉,
Global $hEdit, $aHit, $aRect, $aPos, $iHeight = 20
Global $aItem,$nMsg
Local $GUI_Form = GUICreate("ListView_Sort",450,400)
Local $Button_Close = GUICtrlCreateButton("關閉", 310, 370, 85, 25)
Global $Button_Read_WhiteList = GUICtrlCreateButton("讀list", 200, 370, 85, 25)
Local $Button_Export = GUICtrlCreateButton("匯出", 100, 370, 85, 25)
Local $Button_Delete = GUICtrlCreateButton("刪除", 10, 370, 85, 25)
Local $Button_NewList = GUICtrlCreateButton("新增", 10, 340, 85, 25)
Local $Button_Sort = GUICtrlCreateButton("排序", 100, 340, 85, 25)
Global $GUI_ListView_1 = GUICtrlCreateListView("title1|title2|title3|title4", 10, 10, 430, 250)
Global $GUI_ListView = GUICtrlGetHandle($GUI_ListView_1);回傳LISTVIEW
_GUICtrlListView_SetColumnWidth($GUI_ListView, 0, 80)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 1, 120)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 2, 90)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 3, 90)
Global $hFont = _WinAPI_CreateFont($iHeight - 2, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, '新細明體')
GUISetState(@SW_SHOW,$GUI_Form)
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $Button_Close
Exit
Case $Button_Read_WhiteList
WhiteList()
Case $Button_Export
Button_Export()
Case $Button_Delete
Button_Delete()
Case $Button_NewList
Button_NewList()
Case $Button_Sort
Button_Sort()
EndSwitch
WEnd
Func Button_Sort()
Local $vSortSense = False
_GUICtrlListView_SimpleSort($GUI_ListView, $vSortSense, 3, False) ; 防止下一次插入排序方向切换
EndFunc
Func Button_NewList()
Local $temp = _GUICtrlListView_GetItemCount($GUI_ListView)
_GUICtrlListView_AddItem($GUI_ListView, "新增")
_GUICtrlListView_ClickItem($GUI_ListView, $temp, "left", False, 2)
EndFunc
Func Button_Delete() ;刪除
Local $temp = _GUICtrlListView_GetSelectedIndices($GUI_ListView)
;MsgBox(0,"$temp",$temp)
If $temp <> "" Then
Local $temp2 = _GUICtrlListView_GetItem ( $GUI_ListView, $temp, 1 )
;MsgBox(0,"$temp",$temp2)
_GUICtrlListView_DeleteItem($GUI_ListView, $temp)
MsgBox(0,"資料刪除",$temp2 & "資料已刪除")
EndIf
EndFunc
Func Button_Export() ;匯出
Local $stringtemp
FileDelete("白名單-" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt")
Sleep(500)
;Local $temp = _GUICtrlListView_GetColumnCount($GUI_ListView)
Local $temp =_GUICtrlListView_GetItemCount ($GUI_ListView)
;MsgBox(0,"$temp",$temp)
Local $hFileOpen = FileOpen("test_listview-" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt",512+1)
For $i = 0To $temp -1 Step 1
$aItem = _GUICtrlListView_GetItemTextArray($GUI_ListView, $i)
;_ArrayDisplay($aItem)
$stringtemp = $aItem & "," & $aItem & "," & $aItem & "," & $aItem
FileWriteLine($hFileOpen, $stringtemp )
Next
FileClose($hFileOpen)
MsgBox(0,"匯出完成","test_listview已匯出完成")
EndFunc
Func WhiteList() ;讀白名單
Local $WhiteList_File_Open, $hFileOpen, $ListArray, $FileOpen
$WhiteList_File_Open = FileOpenDialog("選擇文件", @ScriptDir, "選擇文件 (*.txt)", 1)
;MsgBox(0,"$WhiteList_File_Open",$WhiteList_File_Open)
If @error Then
MsgBox($MB_SYSTEMMODAL, "", "沒有選擇文件")
Else
If Not _FileReadToArray($WhiteList_File_Open, $ListArray, $FRTA_COUNT, ",") Then
MsgBox($MB_SYSTEMMODAL, "", "读取该文件时出错. @error: " & @error) ; 读取当前文件时出错.
EndIf
;_ArrayDisplay($ListArray, "arrays 数组 - 计数", Default, 8)
_ArrayDelete($ListArray, 0)
_GUICtrlListView_AddArray($GUI_ListView,$ListArray)
EndIf
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $tNMHDR, $hWndFrom, $iCode, $hFont
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = DllStructGetData($tNMHDR, 'hWndFrom')
$iCode = DllStructGetData($tNMHDR, 'Code')
Switch $iCode
Case $NM_DBLCLK
Global $aHit = _GUICtrlListView_SubItemHitTest($GUI_ListView)
If $aHit <> -1 Then
Local $aRect = _GUICtrlListView_GetSubItemRect($GUI_ListView, $aHit, $aHit)
Local $sItemText = _GUICtrlListView_GetItemText($GUI_ListView, $aHit, $aHit)
Local $aPos = ControlGetPos($hWnd, '', $GUI_ListView)
Local $iStyle = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT)
$hEdit = _GUICtrlEdit_Create($hWnd, $sItemText, $aPos + $aRect, $aPos + $aRect, _GUICtrlListView_GetColumnWidth($GUI_ListView, $aHit), $iHeight, $iStyle)
_WinAPI_BringWindowToTop($hEdit)
_WinAPI_SetFont($hEdit, $hFont, True)
_GUICtrlEdit_SetMargins($hEdit, $EC_LEFTMARGIN, 4)
_WinAPI_SetFocus($hEdit)
_GUICtrlEdit_SetSel($hEdit, 0, -1)
EndIf
Case $NM_CLICK
EndSwitch
EndFunc ;==>WM_NOTIFY
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $iCode = BitShift($iwParam, 16)
Local $nMsgID = BitAND($iwParam, 0x0000FFFF)
Switch $ilParam
Case $hEdit
Switch $iCode
Case $EN_KILLFOCUS
_SetItemText()
EndSwitch
EndSwitch
If $nMsgID = 1 And $hEdit <> '' Then
_SetItemText()
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _SetItemText()
Local $sItemText
$sItemText = _GUICtrlEdit_GetText($hEdit)
_GUICtrlListView_SetItemText($GUI_ListView, $aHit, $sItemText, $aHit)
_WinAPI_DestroyWindow($hEdit)
EndFunc ;==>_SetItemText
这是数值啊,当然转换后前面就没0了...
二○二五年十一月二日 邪恶海盗 发表于 2025-11-2 22:03
这是数值啊,当然转换后前面就没0了...
這倒也想過,目前還無法讓數值轉為文字格式或是其他方式來處理。頭痛 以文本方式排序如何? 本帖最后由 yohoboy 于 2025-11-4 00:35 编辑
chishingchan 发表于 2025-11-3 19:19
以文本方式排序如何?
目前也只能用文本方式來處理,不過還需要理解一下GUILISTVIEW.AU3 自訂義涵數中的_GUICtrlListView_SimpleSort 這個
怎麼運作的,再從中加入 "[" &%TEMP&"]"使之變成文本,然後排序完再靠 StringLen("字符串") 這個取得長度後再透過
stringmid 函數從("字串符",2,'長度-1')再回填到listview 欄位內,應該可完美保留數字開頭為0 時自動刪除的問題,可惜功力不足
無法立即修改函數達成所需,如果成功的話可再增加這函數功能 _GUICtrlListView_TextSort 給引用
Func _GUICtrlListView_SimpleSort($hWnd, ByRef $vSortSense, $iCol, $bToggleSense = True)
Local $iItemCount = _GUICtrlListView_GetItemCount($hWnd)
If $iItemCount Then
Local $iDescending = 0
If UBound($vSortSense) Then
$iDescending = $vSortSense[$iCol]
Else
$iDescending = $vSortSense
EndIf
Local $vSeparatorChar = Opt('GUIDataSeparatorChar')
Local $iColumnCount = _GUICtrlListView_GetColumnCount($hWnd)
Local Enum $iIndexValue = $iColumnCount, $iItemParam ; Additional columns for the index value and ItemParam
Local $aListViewItems[$iItemCount][$iColumnCount + 2]
Local $aSelectedItems = StringSplit(_GUICtrlListView_GetSelectedIndices($hWnd), $vSeparatorChar)
Local $aCheckedItems = __GUICtrlListView_GetCheckedIndices($hWnd)
Local $sItemText, $iFocused = -1
For $i = 0 To $iItemCount - 1 ; Rows
If $iFocused = -1 Then
If _GUICtrlListView_GetItemFocused($hWnd, $i) Then $iFocused = $i
EndIf
_GUICtrlListView_SetItemSelected($hWnd, $i, False)
_GUICtrlListView_SetItemChecked($hWnd, $i, False)
For $j = 0 To $iColumnCount - 1 ; Columns
$sItemText = StringStripWS(_GUICtrlListView_GetItemText($hWnd, $i, $j), $STR_STRIPTRAILING)
If (StringIsFloat($sItemText) Or StringIsInt($sItemText)) Then
$aListViewItems[$i][$j] = Number($sItemText)
Else
$aListViewItems[$i][$j] = $sItemText
EndIf
Next
$aListViewItems[$i][$iIndexValue] = $i ; Index value
$aListViewItems[$i][$iItemParam] = _GUICtrlListView_GetItemParam($hWnd, $i) ; ItemParam
Next
; Sort the ListView array
_ArraySort($aListViewItems, $iDescending, 0, 0, $iCol)
For $i = 0 To $iItemCount - 1 ; Rows
For $j = 0 To $iColumnCount - 1 ; Columns
_GUICtrlListView_SetItemText($hWnd, $i, $aListViewItems[$i][$j], $j)
Next
_GUICtrlListView_SetItemParam($hWnd, $i, $aListViewItems[$i][$iItemParam]) ; ItemParam
For $j = 1 To $aSelectedItems
If $aListViewItems[$i][$iIndexValue] = $aSelectedItems[$j] Then
If $aListViewItems[$i][$iIndexValue] = $iFocused Then
_GUICtrlListView_SetItemSelected($hWnd, $i, True, True)
Else
_GUICtrlListView_SetItemSelected($hWnd, $i, True)
EndIf
ExitLoop
EndIf
Next
For $j = 1 To $aCheckedItems
If $aListViewItems[$i][$iIndexValue] = $aCheckedItems[$j] Then
_GUICtrlListView_SetItemChecked($hWnd, $i, True)
ExitLoop
EndIf
Next
Next
If $bToggleSense Then ; Automatic sort sense toggle
If UBound($vSortSense) Then
$vSortSense[$iCol] = Not $iDescending
Else
$vSortSense = Not $iDescending
EndIf
EndIf
EndIf
EndFunc ;==>_GUICtrlListView_SimpleSort
你的繁体字我看不太懂,我在你的排序处加了两行代码,你看是你要的效果吗?
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <WinAPI.au3>
#include <GUIEdit.au3>
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>
#include <FontConstants.au3>
#include <ButtonConstants.au3>
Opt("TrayIconHide", 0) ;0 = 顯示托盤圖標, 1 = 隱藏托盤圖標
Opt('MustDeclareVars', 1) ;0 = 變量不需預先聲明, 1 = 變量必需預先聲明
Opt("GUICloseOnESC", 1) ;0 = 點擊 Esc 鍵不關閉1 = 點擊 Esc 鍵關閉,
Global $hEdit, $aHit, $aRect, $aPos, $iHeight = 20
Global $aItem,$nMsg
Local $GUI_Form = GUICreate("ListView_Sort",450,400)
Local $Button_Close = GUICtrlCreateButton("關閉", 310, 370, 85, 25)
Global $Button_Read_WhiteList = GUICtrlCreateButton("讀list", 200, 370, 85, 25)
Local $Button_Export = GUICtrlCreateButton("匯出", 100, 370, 85, 25)
Local $Button_Delete = GUICtrlCreateButton("刪除", 10, 370, 85, 25)
Local $Button_NewList = GUICtrlCreateButton("新增", 10, 340, 85, 25)
Local $Button_Sort = GUICtrlCreateButton("排序", 100, 340, 85, 25)
Global $GUI_ListView_1 = GUICtrlCreateListView("title1|title2|title3|title4", 10, 10, 430, 250)
Global $GUI_ListView = GUICtrlGetHandle($GUI_ListView_1);回傳LISTVIEW
_GUICtrlListView_SetColumnWidth($GUI_ListView, 0, 80)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 1, 120)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 2, 90)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 3, 90)
Global $hFont = _WinAPI_CreateFont($iHeight - 2, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, '新細明體')
GUISetState(@SW_SHOW,$GUI_Form)
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $Button_Close
Exit
Case $Button_Read_WhiteList
WhiteList()
Case $Button_Export
Button_Export()
Case $Button_Delete
Button_Delete()
Case $Button_NewList
Button_NewList()
Case $Button_Sort
Button_Sort()
EndSwitch
WEnd
Func Button_Sort()
Local $vSortSense = False
_GUICtrlListView_RegisterSortCallBack($GUI_ListView);////////////////新增行
_GUICtrlListView_SortItems($GUI_ListView, GUICtrlGetState($GUI_ListView));////////////////新增行
; _GUICtrlListView_SimpleSort($GUI_ListView, $vSortSense, 3, False) ; 防止下一次插入排序方向切换
EndFunc
Func Button_NewList()
Local $temp = _GUICtrlListView_GetItemCount($GUI_ListView)
_GUICtrlListView_AddItem($GUI_ListView, "新增")
_GUICtrlListView_ClickItem($GUI_ListView, $temp, "left", False, 2)
EndFunc
Func Button_Delete() ;刪除
Local $temp = _GUICtrlListView_GetSelectedIndices($GUI_ListView)
;MsgBox(0,"$temp",$temp)
If $temp <> "" Then
Local $temp2 = _GUICtrlListView_GetItem ( $GUI_ListView, $temp, 1 )
;MsgBox(0,"$temp",$temp2)
_GUICtrlListView_DeleteItem($GUI_ListView, $temp)
MsgBox(0,"資料刪除",$temp2 & "資料已刪除")
EndIf
EndFunc
Func Button_Export() ;匯出
Local $stringtemp
FileDelete("白名單-" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt")
Sleep(500)
;Local $temp = _GUICtrlListView_GetColumnCount($GUI_ListView)
Local $temp =_GUICtrlListView_GetItemCount ($GUI_ListView)
;MsgBox(0,"$temp",$temp)
Local $hFileOpen = FileOpen("test_listview-" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt",512+1)
For $i = 0To $temp -1 Step 1
$aItem = _GUICtrlListView_GetItemTextArray($GUI_ListView, $i)
;_ArrayDisplay($aItem)
$stringtemp = $aItem & "," & $aItem & "," & $aItem & "," & $aItem
FileWriteLine($hFileOpen, $stringtemp )
Next
FileClose($hFileOpen)
MsgBox(0,"匯出完成","test_listview已匯出完成")
EndFunc
Func WhiteList() ;讀白名單
Local $WhiteList_File_Open, $hFileOpen, $ListArray, $FileOpen
$WhiteList_File_Open = FileOpenDialog("選擇文件", @ScriptDir, "選擇文件 (*.txt)", 1)
;MsgBox(0,"$WhiteList_File_Open",$WhiteList_File_Open)
If @error Then
MsgBox($MB_SYSTEMMODAL, "", "沒有選擇文件")
Else
If Not _FileReadToArray($WhiteList_File_Open, $ListArray, $FRTA_COUNT, ",") Then
MsgBox($MB_SYSTEMMODAL, "", "读取该文件时出错. @error: " & @error) ; 读取当前文件时出错.
EndIf
;_ArrayDisplay($ListArray, "arrays 数组 - 计数", Default, 8)
_ArrayDelete($ListArray, 0)
_GUICtrlListView_AddArray($GUI_ListView,$ListArray)
EndIf
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $tNMHDR, $hWndFrom, $iCode, $hFont
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = DllStructGetData($tNMHDR, 'hWndFrom')
$iCode = DllStructGetData($tNMHDR, 'Code')
Switch $iCode
Case $NM_DBLCLK
Global $aHit = _GUICtrlListView_SubItemHitTest($GUI_ListView)
If $aHit <> -1 Then
Local $aRect = _GUICtrlListView_GetSubItemRect($GUI_ListView, $aHit, $aHit)
Local $sItemText = _GUICtrlListView_GetItemText($GUI_ListView, $aHit, $aHit)
Local $aPos = ControlGetPos($hWnd, '', $GUI_ListView)
Local $iStyle = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT)
$hEdit = _GUICtrlEdit_Create($hWnd, $sItemText, $aPos + $aRect, $aPos + $aRect, _GUICtrlListView_GetColumnWidth($GUI_ListView, $aHit), $iHeight, $iStyle)
_WinAPI_BringWindowToTop($hEdit)
_WinAPI_SetFont($hEdit, $hFont, True)
_GUICtrlEdit_SetMargins($hEdit, $EC_LEFTMARGIN, 4)
_WinAPI_SetFocus($hEdit)
_GUICtrlEdit_SetSel($hEdit, 0, -1)
EndIf
Case $NM_CLICK
EndSwitch
EndFunc ;==>WM_NOTIFY
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $iCode = BitShift($iwParam, 16)
Local $nMsgID = BitAND($iwParam, 0x0000FFFF)
Switch $ilParam
Case $hEdit
Switch $iCode
Case $EN_KILLFOCUS
_SetItemText()
EndSwitch
EndSwitch
If $nMsgID = 1 And $hEdit <> '' Then
_SetItemText()
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _SetItemText()
Local $sItemText
$sItemText = _GUICtrlEdit_GetText($hEdit)
_GUICtrlListView_SetItemText($GUI_ListView, $aHit, $sItemText, $aHit)
_WinAPI_DestroyWindow($hEdit)
EndFunc ;==>_SetItemText sliqi 发表于 2025-11-4 15:00
你的繁体字我看不太懂,我在你的排序处加了两行代码,你看是你要的效果吗?
#include
有達到我的需求,我也變更以列3 為排序測試也ok, 這兩個函數我再研究研究。感謝大神
Func Button_Sort()
Local $vSortSense = False
_GUICtrlListView_RegisterSortCallBack($GUI_ListView);////////////////新增行
;_GUICtrlListView_SortItems($GUI_ListView, GUICtrlGetState($GUI_ListView));////////////////新增行
_GUICtrlListView_SortItems($GUI_ListView, 3);////////////////新增行 指定列3 做排列
; _GUICtrlListView_SimpleSort($GUI_ListView, $vSortSense, 3, False) ; 防止下一次插入排序方向切换
EndFunc 自己回自己,追加#include "_GUICtrlListView_TextSort.au3"
把 _GUICtrlListView_SimpleSort 改為 _GUICtrlListView_TextSort(( $hWnd, ByRef $vSortSense, $iCol [, $bToggleSense = True] ))
函數就可以 避免數字前面0值強制清除
Func _GUICtrlListView_TextSort($hWnd, ByRef $vSortSense, $iCol, $bToggleSense = True)
Local $iItemCount = _GUICtrlListView_GetItemCount($hWnd);取得listview行數量
If $iItemCount Then ;如果有行數量
Local $iDescending = 0
;MsgBox(0,"$vSortSense",$vSortSense) ;$vSortSense = True - 降序排列,False - 升序排列
If UBound($vSortSense) Then
$iDescending = $vSortSense[$iCol]
Else
$iDescending = $vSortSense
EndIf
Local $vSeparatorChar = Opt('GUIDataSeparatorChar')
Local $iColumnCount = _GUICtrlListView_GetColumnCount($hWnd) ;讀取列表列數
Local Enum $iIndexValue = $iColumnCount, $iItemParam ; Additional columns for the index value and ItemParam
Local $aListViewItems[$iItemCount][$iColumnCount + 2]
Local $aSelectedItems = StringSplit(_GUICtrlListView_GetSelectedIndices($hWnd), $vSeparatorChar)
Local $aCheckedItems = __GUICtrlListView_GetCheckedIndices($hWnd)
Local $sItemText, $iFocused = -1
local $Item_Temp
For $i = 0 To $iItemCount - 1 ; Rows
If $iFocused = -1 Then
If _GUICtrlListView_GetItemFocused($hWnd, $i) Then $iFocused = $i
EndIf
_GUICtrlListView_SetItemSelected($hWnd, $i, False)
_GUICtrlListView_SetItemChecked($hWnd, $i, False)
For $j = 0 To $iColumnCount - 1 ; Columns
$Item_Temp = "[" & _GUICtrlListView_GetItemText($hWnd, $i, $j) & "]"
;MsgBox(0,"$Item_Temp",$Item_Temp)
$sItemText = StringStripWS($Item_Temp, $STR_STRIPTRAILING)
If (StringIsFloat($sItemText) Or StringIsInt($sItemText)) Then
;MsgBox(0,"Number($sItemText)",Number($sItemText))
$aListViewItems[$i][$j] = Number($sItemText)
Else
$aListViewItems[$i][$j] = $sItemText
EndIf
Next
$aListViewItems[$i][$iIndexValue] = $i ; Index value
$aListViewItems[$i][$iItemParam] = _GUICtrlListView_GetItemParam($hWnd, $i) ; ItemParam
Next
; Sort the ListView array
_ArraySort($aListViewItems, $iDescending, 0, 0, $iCol)
;_ArrayDisplay($aListViewItems)
;MsgBox(0,"$iItemCount",$iItemCount)
;MsgBox(0,"$iColumnCount",$iColumnCount)
Local $Str_temp,$Str_Len, $Str_Done
For $i = 0 To $iItemCount - 1 ; Rows
For $j = 0 To $iColumnCount - 1 ; Columns
$Str_temp = $aListViewItems[$i][$j]
;MsgBox(0,"$str_temp",$str_temp)
$Str_Len = StringLen($Str_temp) - 2
;MsgBox(0,"$Str_Len",$Str_Len)
$Str_Done =StringMid($Str_temp,2,$Str_Len)
;MsgBox(0,"$Str_Done",$Str_Done)
$aListViewItems[$i][$j] = $Str_Done
Next
Next
;_ArrayDisplay($aListViewItems)
For $i = 0 To $iItemCount - 1 ; Rows
For $j = 0 To $iColumnCount - 1 ; Columns
_GUICtrlListView_SetItemText($hWnd, $i, $aListViewItems[$i][$j], $j)
Next
;_ArrayDisplay($aListViewItems)
;MsgBox(0,"$aListViewItems[$i][$iItemParam]",$aListViewItems[$i][$iItemParam])
_GUICtrlListView_SetItemParam($hWnd, $i, $aListViewItems[$i][$iItemParam]) ; ItemParam
For $j = 1 To $aSelectedItems
If $aListViewItems[$i][$iIndexValue] = $aSelectedItems[$j] Then
If $aListViewItems[$i][$iIndexValue] = $iFocused Then
_GUICtrlListView_SetItemSelected($hWnd, $i, True, True)
Else
_GUICtrlListView_SetItemSelected($hWnd, $i, True)
EndIf
ExitLoop
EndIf
Next
For $j = 1 To $aCheckedItems
If $aListViewItems[$i][$iIndexValue] = $aCheckedItems[$j] Then
_GUICtrlListView_SetItemChecked($hWnd, $i, True)
ExitLoop
EndIf
Next
Next
If $bToggleSense Then ; Automatic sort sense toggle
If UBound($vSortSense) Then
$vSortSense[$iCol] = Not $iDescending
Else
$vSortSense = Not $iDescending
EndIf
EndIf
EndIf
EndFunc ;==>_GUICtrlListView_SimpleSo
页:
[1]