#include <GuiListView.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
$gui = GUICreate('Test')
$lv = GuiCtrlCreateListView('a|b|c', 10, 10, 350, 250)
For $i = 1 To 30
GUICtrlCreateListViewItem(StringFormat('%d|%d|%d', $i-1, Random(1,10,1), Random(1,10,1)), $lv)
Next
$hLV = GUICtrlGetHandle($lv)
_GUICtrlListView_SetExtendedListViewStyle($hLV, BitOR($LVS_EX_FULLROWSELECT,$WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES))
_GUICtrlListView_SetColumnWidth($hLV, 0, 85)
_GUICtrlListView_SetColumnWidth($hLV, 1, 85)
_GUICtrlListView_SetColumnWidth($hLV, 2, $LVSCW_AUTOSIZE_USEHEADER)
$bt1 = GUICtrlCreateButton('Set selected to 3', 10, 280, 120, 24)
$bt2 = GUICtrlCreateButton('Set 5 to selected', 140, 280, 120, 24)
$btRemove = GUICtrlCreateButton('Remove Selection', 270, 280, 120, 24)
$cb = GUICtrlCreateCheckbox(' Use functions with Index check!', 10, 320)
$bCheck = False
GUISetState()
$f = _GUICtrlListView_GetItemTextArray
$fCheck = _GUICtrlListView_GetItemTextArray_MOD
While True
$bCheck = BitAND(GUICtrlRead($cb), $GUI_CHECKED) ? True : False
Switch GUIGetMsg()
Case -3
Exit
Case $bt1
If _GUICtrlListView_SetItemTextArray($hLV, ($bCheck ? $fCheck($hLV) : $f($hLV)), 3) <> 1 Then _
MsgBox(0, 'Error', 'None Selection')
Case $bt2
If _GUICtrlListView_SetItemTextArray($hLV, ($bCheck ? $fCheck($hLV, 5) : $f($hLV, 5))) <> 1 Then _
MsgBox(0, 'Error', 'None Selection')
Case $btRemove
_GUICtrlListView_SetItemSelected($hLV, _GUICtrlListView_GetNextItem($hLV), False, False)
EndSwitch
WEnd
; #FUNCTION# ====================================================================================================================
; Author ........: Gary Frost (gafrost)
; Modified.......: @BugFix
; ===============================================================================================================================
Func _GUICtrlListView_GetItemTextArray_MOD($hWnd, $iItem = -1)
;~ Local $sItems = _GUICtrlListView_GetItemTextString($hWnd, $iItem)
; Here occurs the error. This function produces a wrong output without @error.
; i.e.: listview with 3 columns, none selection but "$iItem = -1" - should use the current selection
; $sItems = "||", none error!
Local $sItems = _GUICtrlListView_GetItemTextString_MOD($hWnd, $iItem)
If $sItems = "" Then
Local $aItems[1] = [0]
Return SetError($LV_ERR, $LV_ERR, $aItems)
EndIf
Return StringSplit($sItems, Opt('GUIDataSeparatorChar'))
EndFunc ;==>_GUICtrlListView_GetItemTextArray
; #FUNCTION# ====================================================================================================================
; Author ........: Gary Frost (gafrost)
; Modified.......: @BugFix
; ===============================================================================================================================
Func _GUICtrlListView_GetItemTextString_MOD($hWnd, $iItem = -1)
Local $sRow = "", $sSeparatorChar = Opt('GUIDataSeparatorChar'), $iSelected
If $iItem = -1 Then
; '$iItem = -1' says: use the current selection
$iSelected = _GUICtrlListView_GetNextItem($hWnd) ; get current row selected
; But this function returns also "-1" if none item is selected
Else
$iSelected = $iItem ; get row
EndIf
; here is required to check if _GUICtrlListView_GetNextItem() has failed
If $iSelected < 0 Or $iSelected > _GUICtrlListView_GetItemCount($hWnd) - 1 Then Return SetError(1,0,0)
For $x = 0 To _GUICtrlListView_GetColumnCount($hWnd) - 1
; _GUICtrlListView_GetItemText() it does not matter at all whether a valid index was passed.
; In case of error there is no message and an empty string is returned. This cannot be distinguished from an actually empty item.
; For this reason, a wrong index must be caught before calling the function.
$sRow &= _GUICtrlListView_GetItemText($hWnd, $iSelected, $x) & $sSeparatorChar
Next
Return StringTrimRight($sRow, 1)
EndFunc ;==>_GUICtrlListView_GetItemTextString
Sorry, forgot to attach my function
_GUICtrlListView_SetItemTextArray, here it is.Code highlighting: