z0iid Posted December 4, 2010 Posted December 4, 2010 (edited) I'm trying to figure out how to return either an array, or delimited string of all selected items in a ListView. I am populating the ListViewItems via text file. (You can create the txt files in the script dir with just a few lines to get the idea). When ever I try to return an array of all selected items, it only returns the top most item selected. I have tried: GuiCtrlRead _GuiCtrlListView_GetSelectedIndices _GuiCtrlListView_GetItemTextArray _GuiCtrlListView_GetItemText _GuiCtrlListView_GetItemTextString _GuiCtrlListView_GetNextItem And variations building on those, and only the Indices function actually returns more than one item. What am I doing wrong??? Thanks for any input. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <File.au3> #include <Array.au3> #include <WinAPI.au3> #Include <GuiListView.au3> #include <GuiListBox.au3> AutoItSetOption("ExpandEnvStrings", 1) Dim $listofall, $listofall_array, $listofMD, $listofMD_array, $listofPODS, $listofPODS_array, $active_list_array, $stuff, $current_item $listofall = @ScriptDir & "\all.txt" $listofMD = @ScriptDir & "\md.txt" $listofPODS = @ScriptDir & "\pods.txt" Opt("GUIOnEventMode", 1) #Region ### START Koda GUI section ### Form= $Form2 = GUICreate("BIG.RED.BUTTON", 687, 442, -1, -1,-1) GUISetBkColor(0x7A7A7A) $ButtonOk = GUICtrlCreateButton("BIG.RED.BUTTON", 28, 290, 627, 137, $BS_DEFPUSHBUTTON) GUICtrlSetFont(-1, 60, 400, 0, "Agency FB") GUICtrlSetBkColor(-1, 0xFF0000) GUICtrlSetOnEvent(-1, "ButtonOkClick") GuiCtrlSetState(-1,$GUI_ONTOP) GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close") $ALLPCs = GUICtrlCreateListView("ALL PC'S", 25, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofall, $listofall_array) $Port_Array_Limit = UBound($listofall_array) - 1 For $i = 1 To $Port_Array_Limit $populate_all_box = String($listofall_array[$i]) GUICtrlCreateListViewItem($populate_all_box, $ALLPCs) Next $Radio1 = GUICtrlCreateRadio("Local Admin", 32, 256, 213, 17) GUICtrlSetFont(-1, 16, 400, 0, "Vrinda") GUICtrlSetOnEvent(-1, "RadioSelect_la") $Radio2 = GUICtrlCreateRadio("SWC Shell", 530, 256, 123, 17, BitOR($GUI_SS_DEFAULT_RADIO,$BS_RIGHTBUTTON)) GUICtrlSetFont(-1, 16, 400, 0, "Vrinda") GUICtrlSetOnEvent(-1, "RadioSelect_ss") $MDWorkstations = GUICtrlCreateListView("MD Workstations", 270, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofMD, $listofMD_array) $Port_Array_Limit = UBound($listofMD_array) - 1 For $i = 1 To $Port_Array_Limit $populate_MD_box = String($listofMD_array[$i]) GUICtrlCreateListViewItem($populate_MD_box, $MDWorkstations) Next $PODS = GUICtrlCreateListView("PODS", 505, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofPODS, $listofPODS_array) $Port_Array_Limit = UBound($listofPODS_array) - 1 For $i = 1 To $Port_Array_Limit $populate_PODS_box = String($listofPODS_array[$i]) GUICtrlCreateListViewItem($populate_PODS_box, $PODS) Next $Checkbox1 = GUICtrlCreateCheckbox("Select ALL", 32, 216, 97, 17) $Checkbox2 = GUICtrlCreateCheckbox("Select ALL", 276, 210, 97, 17) $Checkbox3 = GUICtrlCreateCheckbox("Select ALL", 511, 211, 97, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $msg = GUIGetMsg() sleep(500) If $msg = $GUI_EVENT_CLOSE Then ExitLoop WEnd Func ButtonOkClick() If $status = "Local Admin" Then $schedtask_xml = @ScriptDir & "\localreboot.xml" ElseIf $status = "SWC Shell" Then $schedtask_xml = @ScriptDir & "\swcshellreboot.xml" EndIf $active_list = @ScriptDir & "\templist.txt" ;$data = GUICtrlRead(GUICtrlRead($ALLPCs, 1)) ;$data = _GUICtrlListView_GetSelectedIndices($ALLPCs, False) $data = _GUICtrlListView_GetItemTextArray($ALLPCs, -1) _ArrayDisplay($data) ;MsgBox(0, "", $data) EndFunc Func Form2Close() Exit EndFunc Func RadioSelect_la() Global $status = GUICtrlRead($Radio1, 1) EndFunc Func RadioSelect_ss() Global $status = GUICtrlRead($Radio2, 1) EndFuncall.txt Edited December 4, 2010 by z0iid
smashly Posted December 4, 2010 Posted December 4, 2010 Hi, Get the selected Indices of the ListView then loop through the indices to get the text. eg:expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <File.au3> #include <Array.au3> #include <WinAPI.au3> #Include <GuiListView.au3> #include <GuiListBox.au3> AutoItSetOption("ExpandEnvStrings", 1) Dim $listofall, $listofall_array, $listofMD, $listofMD_array, $listofPODS, $listofPODS_array, $active_list_array, $stuff, $current_item $listofall = @ScriptDir & "\all.txt" $listofMD = @ScriptDir & "\md.txt" $listofPODS = @ScriptDir & "\pods.txt" Opt("GUIOnEventMode", 1) #Region ### START Koda GUI section ### Form= $Form2 = GUICreate("BIG.RED.BUTTON", 687, 442, -1, -1,-1) GUISetBkColor(0x7A7A7A) $ButtonOk = GUICtrlCreateButton("BIG.RED.BUTTON", 28, 290, 627, 137, $BS_DEFPUSHBUTTON) GUICtrlSetFont(-1, 60, 400, 0, "Agency FB") GUICtrlSetBkColor(-1, 0xFF0000) GUICtrlSetOnEvent(-1, "ButtonOkClick") GuiCtrlSetState(-1,$GUI_ONTOP) GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close") $ALLPCs = GUICtrlCreateListView("ALL PC'S", 25, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofall, $listofall_array) $Port_Array_Limit = UBound($listofall_array) - 1 For $i = 1 To $Port_Array_Limit $populate_all_box = String($listofall_array[$i]) GUICtrlCreateListViewItem($populate_all_box, $ALLPCs) Next $Radio1 = GUICtrlCreateRadio("Local Admin", 32, 256, 213, 17) GUICtrlSetFont(-1, 16, 400, 0, "Vrinda") GUICtrlSetOnEvent(-1, "RadioSelect_la") $Radio2 = GUICtrlCreateRadio("SWC Shell", 530, 256, 123, 17, BitOR($GUI_SS_DEFAULT_RADIO,$BS_RIGHTBUTTON)) GUICtrlSetFont(-1, 16, 400, 0, "Vrinda") GUICtrlSetOnEvent(-1, "RadioSelect_ss") $MDWorkstations = GUICtrlCreateListView("MD Workstations", 270, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofMD, $listofMD_array) $Port_Array_Limit = UBound($listofMD_array) - 1 For $i = 1 To $Port_Array_Limit $populate_MD_box = String($listofMD_array[$i]) GUICtrlCreateListViewItem($populate_MD_box, $MDWorkstations) Next $PODS = GUICtrlCreateListView("PODS", 505, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofPODS, $listofPODS_array) $Port_Array_Limit = UBound($listofPODS_array) - 1 For $i = 1 To $Port_Array_Limit $populate_PODS_box = String($listofPODS_array[$i]) GUICtrlCreateListViewItem($populate_PODS_box, $PODS) Next $Checkbox1 = GUICtrlCreateCheckbox("Select ALL", 32, 216, 97, 17) $Checkbox2 = GUICtrlCreateCheckbox("Select ALL", 276, 210, 97, 17) $Checkbox3 = GUICtrlCreateCheckbox("Select ALL", 511, 211, 97, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 ;~ $msg = GUIGetMsg() ; Will not work with Opt("GUIOnEventMode", 1) Sleep(100) ;~ If $msg = $GUI_EVENT_CLOSE Then ExitLoop WEnd Func ButtonOkClick() Local $aSelcted, $aDdata $aSelcted = _GUICtrlListView_GetSelectedIndices($ALLPCs, True) If $aSelcted[0] > 0 Then Dim $aDdata[$aSelcted[0] + 1] $aDdata[0] = $aSelcted[0] For $i = 1 To $aSelcted[0] $aDdata[$i] = _GUICtrlListView_GetItemTextString($ALLPCs, $aSelcted[$i]) Next EndIf If IsArray($aDdata) Then _ArrayDisplay($aDdata) EndFunc Func Form2Close() Exit EndFunc Func RadioSelect_la() Global $status = GUICtrlRead($Radio1, 1) EndFunc Func RadioSelect_ss() Global $status = GUICtrlRead($Radio2, 1) EndFunc Cheers
z0iid Posted December 5, 2010 Author Posted December 5, 2010 Thanks - works great. I had tried to loop through the indices, but I wasn't calling it correctly. Thanks for the tip regarding guioneventmode - it was causing 25%cpu usage without the half second sleep. Hi, Get the selected Indices of the ListView then loop through the indices to get the text. eg:expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <File.au3> #include <Array.au3> #include <WinAPI.au3> #Include <GuiListView.au3> #include <GuiListBox.au3> AutoItSetOption("ExpandEnvStrings", 1) Dim $listofall, $listofall_array, $listofMD, $listofMD_array, $listofPODS, $listofPODS_array, $active_list_array, $stuff, $current_item $listofall = @ScriptDir & "\all.txt" $listofMD = @ScriptDir & "\md.txt" $listofPODS = @ScriptDir & "\pods.txt" Opt("GUIOnEventMode", 1) #Region ### START Koda GUI section ### Form= $Form2 = GUICreate("BIG.RED.BUTTON", 687, 442, -1, -1,-1) GUISetBkColor(0x7A7A7A) $ButtonOk = GUICtrlCreateButton("BIG.RED.BUTTON", 28, 290, 627, 137, $BS_DEFPUSHBUTTON) GUICtrlSetFont(-1, 60, 400, 0, "Agency FB") GUICtrlSetBkColor(-1, 0xFF0000) GUICtrlSetOnEvent(-1, "ButtonOkClick") GuiCtrlSetState(-1,$GUI_ONTOP) GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close") $ALLPCs = GUICtrlCreateListView("ALL PC'S", 25, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofall, $listofall_array) $Port_Array_Limit = UBound($listofall_array) - 1 For $i = 1 To $Port_Array_Limit $populate_all_box = String($listofall_array[$i]) GUICtrlCreateListViewItem($populate_all_box, $ALLPCs) Next $Radio1 = GUICtrlCreateRadio("Local Admin", 32, 256, 213, 17) GUICtrlSetFont(-1, 16, 400, 0, "Vrinda") GUICtrlSetOnEvent(-1, "RadioSelect_la") $Radio2 = GUICtrlCreateRadio("SWC Shell", 530, 256, 123, 17, BitOR($GUI_SS_DEFAULT_RADIO,$BS_RIGHTBUTTON)) GUICtrlSetFont(-1, 16, 400, 0, "Vrinda") GUICtrlSetOnEvent(-1, "RadioSelect_ss") $MDWorkstations = GUICtrlCreateListView("MD Workstations", 270, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofMD, $listofMD_array) $Port_Array_Limit = UBound($listofMD_array) - 1 For $i = 1 To $Port_Array_Limit $populate_MD_box = String($listofMD_array[$i]) GUICtrlCreateListViewItem($populate_MD_box, $MDWorkstations) Next $PODS = GUICtrlCreateListView("PODS", 505, 41, 154, 160, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_FULLROWSELECT)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 133) _FileReadToArray($listofPODS, $listofPODS_array) $Port_Array_Limit = UBound($listofPODS_array) - 1 For $i = 1 To $Port_Array_Limit $populate_PODS_box = String($listofPODS_array[$i]) GUICtrlCreateListViewItem($populate_PODS_box, $PODS) Next $Checkbox1 = GUICtrlCreateCheckbox("Select ALL", 32, 216, 97, 17) $Checkbox2 = GUICtrlCreateCheckbox("Select ALL", 276, 210, 97, 17) $Checkbox3 = GUICtrlCreateCheckbox("Select ALL", 511, 211, 97, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 ;~ $msg = GUIGetMsg() ; Will not work with Opt("GUIOnEventMode", 1) Sleep(100) ;~ If $msg = $GUI_EVENT_CLOSE Then ExitLoop WEnd Func ButtonOkClick() Local $aSelcted, $aDdata $aSelcted = _GUICtrlListView_GetSelectedIndices($ALLPCs, True) If $aSelcted[0] > 0 Then Dim $aDdata[$aSelcted[0] + 1] $aDdata[0] = $aSelcted[0] For $i = 1 To $aSelcted[0] $aDdata[$i] = _GUICtrlListView_GetItemTextString($ALLPCs, $aSelcted[$i]) Next EndIf If IsArray($aDdata) Then _ArrayDisplay($aDdata) EndFunc Func Form2Close() Exit EndFunc Func RadioSelect_la() Global $status = GUICtrlRead($Radio1, 1) EndFunc Func RadioSelect_ss() Global $status = GUICtrlRead($Radio2, 1) EndFunc Cheers
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now