Jump to content

ListViewEx and Arrays


Recommended Posts

I have a problem using listview and arrays: I try to create listview from file which contains multiples of 3 lines, therefore 3 columns and rows of total number of lines devided on 3. creation works fine but it adds extra rows as as number of items: ex. 24 lines in text creates 3 columns 8rows and other 16 rows empty. this is seen in listview and adds scroll even though my gui shouldn't need.  I tried looking at styles and extended styles but couldn't find forcing limitation on number of rows created.

Func _config()
    $configMain = GUICreate('Settings', 530, 330, -1, -1, '', '', $mainGUI)
    Global $editBtn = GUICtrlCreateButton("Edit", 430, 50, 70, 30); Edit Btn
    Global $saveBtn = GUICtrlCreateButton("Save", 430, 120, 70, 30); Save Btn
    Global $cancelBtn = GUICtrlCreateButton("Cancel", 430, 180, 70, 30); Cancel Btn

    ; create listview with 3 columns
    $cLV = GUICtrlCreateListView("Server Name|server address|user Name", 10, 10, 400, 280)

    GUICtrlSetFont(-1, 10); set font for previous control
    _GUICtrlListView_SetColumnWidth(-1, 0, 95); first column size
    _GUICtrlListView_SetColumnWidth(-1, 1, 180); second column size
    _GUICtrlListView_SetColumnWidth(-1, 2, 100); third column size

    Local $j = 1, $k = 2, $l = 3 ; starting lines for $j - server; $k - server address; $l - account name
    For $i = 1 To _FileCountLines($configF); 1 to  number of lines present in file
        $sLine = FileReadLine($configF, $j); Server name Line read
        $saLine = FileReadLine($configF, $k); server address Line read
        $anLine = FileReadLine($configF, $l); user Name read

        $listV = GUICtrlCreateListViewItem($sLine & '|' & $saLine & '|' & $anLine, $cLV); assign 3 values each with iteration _
        ;  seperated and concatenated by '|'
        $j += 3; move three lines below
        $k += 3; move three lines below
        $l += 3; move three lines below
    Next


    $cLVarray = _GUIListViewEx_ReadToArray($cLV); read ListView to array
    $cLVinit = _GUIListViewEx_Init($cLV, $cLVarray, 0, 0, True, 1 + 2 + 512); Initialize
    _GUIListViewEx_SetEditStatus($cLVinit, "*") ; all columns can be edited
    _GUIListViewEx_MsgRegister() ; receive messages for UDF functions
    _GUIListViewEx_SetActive($cLVinit) ; set $cLVinit - 1 as active

    GUISetState(@SW_SHOW, $configMain)
EndFunc   ;==>_config

 

i can avoid this by

For $i = 1 To 50
        _GUICtrlListView_DeleteItem($cLV, 8)
        $i += 1
    Next


if i know maximum number of rows i will need, but items in listview are editable and therefore unreliable. I tried

_GUICtrlListView_DeleteItem($cLV, _GUICtrlListView_GetItemCount($cLV) / _GUICtrlListView_GetColumnCount($cLV))

this returns empty listview

when it comes to editing part:

$cLVarrayModif = _GUIListViewEx_ReturnArray($cLVinit, 0)
                 _ArrayDisplay($cLVarrayModif)

this also shows 24 rows 3columns

Edited by shotiko
typo
Link to comment
Share on other sites

  • Moderators

shotiko,

If you read the file like this, you avoid the extra lines - and it is faster:

#include <GUIConstantsEx.au3>

#include "GuiListViewEx.au3"

$configF = FileOpen("Data.txt") ; Open file to get handle <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

$configMain = GUICreate('Settings', 530, 330)
Global $editBtn = GUICtrlCreateButton("Edit", 430, 50, 70, 30) ; Edit Btn
Global $saveBtn = GUICtrlCreateButton("Save", 430, 120, 70, 30) ; Save Btn
Global $cancelBtn = GUICtrlCreateButton("Cancel", 430, 180, 70, 30) ; Cancel Btn

; create listview with 3 columns
$cLV = GUICtrlCreateListView("Server Name|server address|user Name", 10, 10, 400, 280)

GUICtrlSetFont(-1, 10) ; set font for previous control
_GUICtrlListView_SetColumnWidth(-1, 0, 95) ; first column size
_GUICtrlListView_SetColumnWidth(-1, 1, 180) ; second column size
_GUICtrlListView_SetColumnWidth(-1, 2, 100) ; third column size

Local $j = 1, $k = 2, $l = 3 ; starting lines for $j - server; $k - server address; $l - account name
While 1
    $sLine = FileReadLine($configF) ; Server name Line read             ; Use handle to read file line <<<<<<<<<<<<<<<<<<<<<
    If @error = -1 Then ExitLoop                                        ; Exit loop when file ends <<<<<<<<<<<<<<<<<<<<<<<<<
    $saLine = FileReadLine($configF) ; server address Line read         ; Line number automatically increases <<<<<<<<<<<<<<
    $anLine = FileReadLine($configF) ; user Name read                   ; And it is much faster as well! <<<<<<<<<<<<<<<<<<<

    $listV = GUICtrlCreateListViewItem($sLine & '|' & $saLine & '|' & $anLine, $cLV) ; assign 3 values each with iteration _
WEnd

GUISetState(@SW_SHOW, $configMain)

FileClose($configF) ; Do not forget to close the file <<<<<<<<<<<<<<<<<<<<<<<

$cLVarray = _GUIListViewEx_ReadToArray($cLV); read ListView to array
_ArrayDisplay($cLVarray, "", Default, 8)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...