Mannyfresh15 Posted July 21, 2016 Share Posted July 21, 2016 (edited) Does anybody know how to retrieve text from a List? That is: GUICtrlCreateList. I've found this thread and other similar that show how to retrieve text from a listview however I'm more interested in plain list control this type of controls have a feature/style called $LBS_NOTIFY that can be used somehow to get the text from the item in the list when the user clicks or double clicks the item but I have no Idea how to achieve it. I will appreciate anyhelp in anyway. Edited July 22, 2016 by Mannyfresh15 Link to comment Share on other sites More sharing options...
AutoBert Posted July 21, 2016 Share Posted July 21, 2016 Just use GuiCtrlRead in the "GuiGetMsg-Loop". Here's a small demo with 2 Listboxes: expandcollapse popup#include <ListBoxConstants.au3> #include <WindowsConstants.au3> #include <ButtonConstants.au3> #include <GuiListBox.au3> #include <GUIConstantsEx.au3> #include <array.au3> #include <File.au3> Const $sCSV = @AppDataDir & "\2cbo.CSV" Const $sElect = "bitte auswählen" Dim $a_sCSV, $aSplit, $sLstChr = "" _FileReadToArray($sCSV, $a_sCSV) Dim $aCSV[$a_sCSV[0]][2] For $i = 1 To UBound($a_sCSV) - 1 ;ConsoleWrite($i & $a_sCSV[$i] & @CRLF) $aSplit = StringSplit($a_sCSV[$i], ";") If Not StringInStr($sLstChr, $aSplit[1]) Then $sLstChr &= $aSplit[1] & "|" $aCSV[$i - 1][0] = $aSplit[1] $aCSV[$i - 1][1] = $aSplit[2] Next ;ConsoleWrite($sLstChr & @CRLF) $hGui = GUICreate("2 Listen aus 1er CSV", 250, 140, 302, 218) $idListChr = GUICtrlCreateList($sElect, 8, 8, 200, 50,BitOR($WS_BORDER, $WS_VSCROLL, $WS_TABSTOP, $LBS_NOTIFY)) GUICtrlSetData(-1, $sLstChr) $idListChrNr = GUICtrlCreateList("", 8, 60, 200, 50) $idBtnExit = GUICtrlCreateButton("Be&enden", 8, 110) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $idBtnExit Exit Case $idListChr $sVal = GUICtrlRead($idListChr) GUICtrlSetData($idListChrNr, "") If $sVal <> $sElect Then $aSplit = _ArrayFindAll($aCSV, $sVal, 0, 0, True, True, 0) $sLstChr = "" For $i = 0 To UBound($aSplit) - 1 $sLstChr &= $aCSV[$aSplit[$i]][1] & "|" Next ;ConsoleWrite($sLstChr & @CRLF) GUICtrlSetData($idListChrNr, $sLstChr) _GUICtrlListBox_SetCurSel($idListChrNr, 0) EndIf EndSwitch WEnd I used 2cbo.csv for populating both ListBoxes. Link to comment Share on other sites More sharing options...
Mannyfresh15 Posted July 21, 2016 Author Share Posted July 21, 2016 (edited) Thank you very much for your reply I really appreciated. Although I get an error ): (13) : ==> Subscript used on non-accessible variable.: Dim $aCSV[$a_sCSV[0]][2] Dim $aCSV[$a_sCSV^ ERROR By the way. I've found a way, way way easier than the one you posted. I will post an example in a minute. Edited July 21, 2016 by Mannyfresh15 Link to comment Share on other sites More sharing options...
AutoBert Posted July 21, 2016 Share Posted July 21, 2016 43 minutes ago, Mannyfresh15 said: Thank you very much for your reply I really appreciated. Although I get an error ): Have you downloaded the CSV-file in your @AppDataDir? Link to comment Share on other sites More sharing options...
Mannyfresh15 Posted July 21, 2016 Author Share Posted July 21, 2016 (edited) 2 hours ago, AutoBert said: Have you downloaded the CSV-file in your @AppDataDir? I Changed the path and created one and still doesn't work ): Anyways here is my version. expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <File.au3> #include <ListBoxConstants.au3> #include <GuiListBox.au3> Global $MyFileList = "" #cs Global $MyFileList [4] $MyFileList [0] = "3" $MyFileList [1] = "Im #1" $MyFileList [2] = "I'm #2" $MyFileList [3] = "I'm #3" #ce #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("NGT File Creator", 387, 233, 414, 146) GUISetFont(12, 400, 0, "MS Sans Serif") $Button1 = GUICtrlCreateButton("Select", 292, 17, 75, 25) $Input1 = GUICtrlCreateInput("Enter a valid folder path with files in it.", 5, 16, 277, 28) GUICtrlSetstate(-1, $GUI_FOCUS) $idMylist = GUICtrlCreateList("Your files will be shown here", 5, 60, 376, 182,$WS_VSCROLL + $LBS_NOTIFY ) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### #cs For $a = 0 To (UBound ( $MyFileList ) -1 ) If $a = 0 Then GUICtrlSetData($idMylist, "") GUICtrlSetData($idMylist, " Number of files in Folder: " & $MyFileList [$a] & @CRLF & @CRLF ) Else GUICtrlSetData($idMylist,$a & " " & $MyFileList [$a] ) EndIf Next #ce While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 $Folder1 = FileSelectFolder("Select a Folder", @UserProfileDir ,1) if Not @error Then If DirGetSize ($Folder1) = 0 Then MsgBox(262144, "Hey!", $Folder1 & @CRLF & "The folder is emty!.") ContinueLoop EndIf GUICtrlSetData($Input1 , $Folder1 ) $MyFileList = _FileListToArray ( $Folder1 ,"*" , 1) if @error = 1 or @error = 2 or @error = 3 or @error = 4 Then MsgBox (262144 , "Hey!" , "Error Loading Files ):" ,0) EndIf For $a = 0 To (UBound ( $MyFileList ) -1 ) If $a = 0 Then GUICtrlSetData($idMylist, "") GUICtrlSetData($idMylist, " Number of files in Folder: " & $MyFileList [$a] ) Else GUICtrlSetData($idMylist ,$a & " " & $MyFileList [$a] ) EndIf Next EndIf Case $idMylist $Item = _GUICtrlListBox_GetCurSel ( $idMylist ) If $Item > 0 Then For $a = 1 to UBound ( $MyFileList) -1 if $a = $Item Then ClipPut ( $MyFileList [$a]) ExitLoop EndIf Next _WinAPI_ShowMsg("Current Selection: " & $Item & " " & $MyFileList [$a] & @LF & "has been put in the Clipboard." ) EndIf Case $Input1 $file1 = GUICtrlRead($Input1) If FileGetSize ($file1) Then MsgBox(262144, "Hey!", $file1 & @CRLF & "It's not a folder!.") ContinueLoop EndIf If DirGetSize ($file1) = 0 Then MsgBox(262144, "Hey!", $file1 & @CRLF & "The folder is emty!.") ContinueLoop EndIf if Not FileExists ($file1) Then MsgBox (262144 , "Hey!" , "The folder doesn't exist!",0) ContinueLoop EndIf $MyFileList = _FileListToArray ( $file1 ,"*" , 1) if @error = 1 or @error = 2 or @error = 3 or @error = 4 Then MsgBox (262144 , "Hey!" , "Error Loading Files ):" ,0) EndIf For $a = 0 To (UBound ( $MyFileList ) -1 ) If $a = 0 Then GUICtrlSetData($idMylist, "") GUICtrlSetData($idMylist, " Number of files in Folder: " & $MyFileList [$a] ) Else GUICtrlSetData($idMylist,$a & " " & $MyFileList [$a] ) EndIf Next EndSwitch WEnd Edited July 22, 2016 by Mannyfresh15 Link to comment Share on other sites More sharing options...
AutoBert Posted July 21, 2016 Share Posted July 21, 2016 (edited) Script works if CSV-file exists, so try this version, CSV-file will be generated if not exists: expandcollapse popup#include <ListBoxConstants.au3> #include <WindowsConstants.au3> #include <ButtonConstants.au3> #include <GuiListBox.au3> #include <GUIConstantsEx.au3> #include <array.au3> #include <File.au3> Const $sCSV = @AppDataDir & "\2cbo.CSV" Const $sElect = "bitte auswählen" Global $a_sCSV, $aSplit, $sLstChr = "" If Not FileExists($sCSV) Then FileWriteLine($sCSV,'Auto;Felgen') FileWriteLine($sCSV,'Werkzeug;BitSätze') FileWriteLine($sCSV,'Werkzeug;Schraubenschlüssel') FileWriteLine($sCSV,'Auto;Reifen') FileWriteLine($sCSV,'Zubehör;Enteiserspray') FileWriteLine($sCSV,'Auto;Kühler') EndIf _FileReadToArray($sCSV, $a_sCSV) Dim $aCSV[$a_sCSV[0]][2] For $i = 1 To UBound($a_sCSV) - 1 ;ConsoleWrite($i & $a_sCSV[$i] & @CRLF) $aSplit = StringSplit($a_sCSV[$i], ";") If Not StringInStr($sLstChr, $aSplit[1]) Then $sLstChr &= $aSplit[1] & "|" $aCSV[$i - 1][0] = $aSplit[1] $aCSV[$i - 1][1] = $aSplit[2] Next ;ConsoleWrite($sLstChr & @CRLF) $hGui = GUICreate("2 Listen aus 1er CSV", 250, 140, 302, 218) $idListChr = GUICtrlCreateList($sElect, 8, 8, 200, 50, BitOR($WS_BORDER, $WS_VSCROLL, $WS_TABSTOP, $LBS_NOTIFY)) GUICtrlSetData(-1, $sLstChr) $idListChrNr = GUICtrlCreateList("", 8, 60, 200, 50) $idBtnExit = GUICtrlCreateButton("Be&enden", 8, 110) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $idBtnExit Exit Case $idListChr $sVal = GUICtrlRead($idListChr) GUICtrlSetData($idListChrNr, "") If $sVal <> $sElect Then $aSplit = _ArrayFindAll($aCSV, $sVal, 0, 0, True, True, 0) $sLstChr = "" For $i = 0 To UBound($aSplit) - 1 $sLstChr &= $aCSV[$aSplit[$i]][1] & "|" Next ;ConsoleWrite($sLstChr & @CRLF) GUICtrlSetData($idListChrNr, $sLstChr) _GUICtrlListBox_SetCurSel($idListChrNr, 0) EndIf EndSwitch WEnd Edited July 21, 2016 by AutoBert Mannyfresh15 1 Link to comment Share on other sites More sharing options...
Mannyfresh15 Posted July 22, 2016 Author Share Posted July 22, 2016 Now, that works! Thank you so much! Link to comment Share on other sites More sharing options...
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