Jump to content

GUICtrlCreateListView - delete and re-create problem


Recommended Posts

I am attempting to write some code to possibly help someone else on this board. However, I cannot figure out something. I have a list view that I'm trying to refresh. My idea is to delete the listview, recreate it and re-populate the data every time something is added, changed or deleted. The _RefreshData() function deletes it, but does not re-create it. Currently, only the Add A Product button has been written.

Does anyone have any explanation why this is happening. I don't understand it.

Here is my code:

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <array.au3>
 
Global $productCode,$make,$model,$currentStock,$dataModified
 
IniWrite("InventoryData.ini", "test", "test", "1")
 
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 623, 442, 192, 124)
$ListView1 = GUICtrlCreateDummy() ; Created a dummy to avoid an error on first run of the _RefreshData() function
$Button1 = GUICtrlCreateButton("Add A Product", 16, 408, 91, 25)
$Button2 = GUICtrlCreateButton("Edit A Product", 120, 408, 91, 25)
$Button3 = GUICtrlCreateButton("Delete A Product", 224, 408, 107, 25)
GUISetState(@SW_SHOW)
_RefreshData()
#EndRegion ### END Koda GUI section ###
 
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            _AddAProduct()
    EndSwitch
WEnd
 
Func _AddAProduct()
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form1", 336, 258, 302, 218)
$cInput1 = GUICtrlCreateInput("", 16, 24, 193, 21)
$cInput2 = GUICtrlCreateInput("", 16, 64, 193, 21)
$cInput3 = GUICtrlCreateInput("", 16, 104, 193, 21)
$cInput4 = GUICtrlCreateInput("", 16, 144, 193, 21)
$cInput5 = GUICtrlCreateInput("", 16, 184, 193, 21)
$Label1 = GUICtrlCreateLabel("Product Code", 224, 24, 69, 17)
$Label2 = GUICtrlCreateLabel("Make", 224, 64, 31, 17)
$Label3 = GUICtrlCreateLabel("Model", 224, 104, 33, 17)
$Label4 = GUICtrlCreateLabel("Current Stock", 224, 144, 69, 17)
$Label5 = GUICtrlCreateLabel("Date Modified", 224, 184, 70, 17)
$Button3 = GUICtrlCreateButton("Add Product", 120, 216, 91, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
 
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            GUIDelete($Form2)
            ExitLoop
        Case $Button3
            $productCode = GUICtrlRead($cInput1)
            $make = GUICtrlRead($cInput2)
            $model = GUICtrlRead($cInput3)
            $currentStock = GUICtrlRead($cInput4)
            $dataModified = GUICtrlRead($cInput5)
            $errorCheck = IniRead("InventoryData.ini", "Product Code", "Product Code", "NotInDatabase")
            If $errorCheck = "NotInDatabase" Then
                IniWrite("InventoryData.ini", $productCode, "Product Code", $productCode)
                IniWrite("InventoryData.ini", $productCode, "Make", $make)
                IniWrite("InventoryData.ini", $productCode, "Model", $model)
                IniWrite("InventoryData.ini", $productCode, "Current Stock", $currentStock)
                IniWrite("InventoryData.ini", $productCode, "Date Modified", $dataModified)
            Else
                MsgBox(0, "Error", "The product is already in the database")
            EndIf
             _RefreshData()
            GUIDelete($Form2)
            ExitLoop
    EndSwitch
WEnd
EndFunc
 
Func _RefreshData()
GUICtrlDelete($ListView1) ; Delete the old listview
$ListView1 = GUICtrlCreateListView("Product Code|Make|Model|Current Stock|Date Modified", 16, 8, 586, 390) ; Re-create the listview
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 100)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 150)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 150)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 85)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 100)
 
$sectionNames = IniReadSectionNames("InventoryData.ini")
 
For $i = 1 to $sectionNames[0] Step 1
    $productCode = IniRead("InventoryData.ini", $sectionNames[$i], "Product Code", "NotFound")
    $make = IniRead("InventoryData.ini", $sectionNames[$i], "Make", "NotFound")
    $model = IniRead("InventoryData.ini", $sectionNames[$i], "Model", "NotFound")
    $currentStock = IniRead("InventoryData.ini", $sectionNames[$i], "Current Stock", "NotFound")
    $dataModified = IniRead("InventoryData.ini", $sectionNames[$i], "Date Modified", "NotFound")
    GUICtrlCreateListViewItem($productCode & "|" & $make & "|" & $model & "|" & $currentStock & "|" & $dataModified, $ListView1)
Next
EndFunc

#include <ByteMe.au3>

Link to comment
Share on other sites

I am not sure 100% but for me it seems that your script will create the listview in the GUI you are deleting the very next line.

Try deleting the $Form2 before running _RefreshData

When working with multiple GUIs, take care to have the correct GUI selected. Use GUISwitch.

If deleting the GUI first does not work - use GUISwitch($Form1) before running _RefreshData

Edited by enaiman

SNMP_UDF ... for SNMPv1 and v2c so far, GetBulk and a new example script

wannabe "Unbeatable" Tic-Tac-Toe

Paper-Scissor-Rock ... try to beat it anyway :)

Link to comment
Share on other sites

enaiman, your suggestion of GuiSwitch fixed the problem! Thank you! Now I can proceed. I encountered the same problem in another project I worked on and now I can fix that one, too.

Thanks again for your help!

Just for information purposes, this is a link to the thread I'm trying to help:

Edited by sleepydvdr

#include <ByteMe.au3>

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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...