Valnurat

Listview search

5 posts in this topic

I have 8 listview on my GUI. I would like to search in the listview for a number. I only want to search in 3 of the 8 listviews. I know number 1 is in $hLV_C1 and not in the others, but when I run this the result is that that I get the message that it is found in all of my 3 listviews I want to search for.

Global $aSearchListview[3] = ["$hLV_C1","$hLV_C3","$hLV_C5"]
    $hLV_C1 = GUICtrlCreateListView('0', 245, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C1, 0, $LVSCW_AUTOSIZE)
    $hLV_C2 = GUICtrlCreateListView('0', 275, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C2, 0, $LVSCW_AUTOSIZE)
    $hLV_C3 = GUICtrlCreateListView('0', 305, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C3, 0, $LVSCW_AUTOSIZE)
    $hLV_C4 = GUICtrlCreateListView('0', 335, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C4, 0, $LVSCW_AUTOSIZE)
    $hLV_C5 = GUICtrlCreateListView('0', 365, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C5, 0, $LVSCW_AUTOSIZE)
    $hLV_C6 = GUICtrlCreateListView('0', 395, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C6, 0, $LVSCW_AUTOSIZE)
    $hLV_C7 = GUICtrlCreateListView('0', 425, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C7, 0, $LVSCW_AUTOSIZE)

    
    Local $sNumber = '1', $g_bSortSense = false
    GUICtrlCreateListViewItem($sNumber, $hLV_C1)
    _GUICtrlListView_SimpleSort($hLV_C1,$g_bSortSense,0,False)
    For $iColumnIndex = 0 to UBound($aSearchListview) -1
        Local $iIndex = _GUICtrlListView_FindItem($aSearchListview[$iColumnIndex],-1,$sNumber)
        If $iIndex <> -1 Then
            MsgBox(0,'Found',$aSearchListview[$iColumnIndex])
        Else
            MsgBox(0,'Not Found',$aSearchListview[$iColumnIndex])
        EndIf
    Next

Why is that?


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites



Please, make a full runable with populated LV's (reproducer) script showing your issue(s).

Share this post


Link to post
Share on other sites
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

Local $aGUT[0]
Local $aSearchListview[3] = ["$hLV_C1","$hLV_C3","$hLV_C5"]
Local $MainGUIForm = GUICreate("My GUI",455,600)
Local $hHeader, $sNumber, $g_bSortSense = False

    For $i = 0 To 90
        _ArrayAdd($aGUT, $i)
    Next
    GUICtrlCreateTabItem("R/B")
    $hLV_RB = GUICtrlCreateListView('Test', 50, 100, 94, 255, $LVS_NOCOLUMNHEADER)

    ; Now calculate ListView 2 vertical size
    $hHeader = _GUICtrlListView_GetHeader($hLV_RB)
    $aSize = WinGetPos($hHeader)
    $iHeaderHeight = $aSize[3] ; Header height
    $aRect = _GUICtrlListView_GetItemRect($hLV_RB, 0)
    $iItemHeight = $aRect[3] - $aRect[1] ; Item height
    $iTotalHeight = $iHeaderHeight + (20 * ($iItemHeight + .5)) -10 ; Allow for the inter-item gaps
    $hLV_C0 = GUICtrlCreateListView('0', 185, 40, 50, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C0, 0, $LVSCW_AUTOSIZE)
    For $i = 0 To 12
        GUICtrlCreateListViewItem( $i, $hLV_C0)
    Next
    $hLV_C1 = GUICtrlCreateListView('0', 245, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C1, 0, $LVSCW_AUTOSIZE)
    $hLV_C2 = GUICtrlCreateListView('0', 275, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C2, 0, $LVSCW_AUTOSIZE)
    $hLV_C3 = GUICtrlCreateListView('0', 305, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C3, 0, $LVSCW_AUTOSIZE)
    $hLV_C4 = GUICtrlCreateListView('0', 335, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C4, 0, $LVSCW_AUTOSIZE)
    $hLV_C5 = GUICtrlCreateListView('0', 365, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C5, 0, $LVSCW_AUTOSIZE)
    $hLV_C6 = GUICtrlCreateListView('0', 395, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C6, 0, $LVSCW_AUTOSIZE)
    $hLV_C7 = GUICtrlCreateListView('0', 425, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C7, 0, $LVSCW_AUTOSIZE)

Local $id0 = GUICtrlCreatePic("C:\Program Files (x86)\AutoIt3\Examples\GUI\logo4.gif", 0, 0, 169, 68)


GUISetState(@SW_SHOW)

$bProceed = False
Do
    $idMsg = GUIGetMsg()
    Switch $idMsg
        Case $id0
            $sNumber = '1'
            $bProceed = True
    EndSwitch
    If $bProceed Then
        $iIndex = _ArraySearch($aGUT, $sNumber)
        If $iIndex <> - 1 Then
            ; Delete it
            _ArrayDelete($aGUT, $iIndex)
            ; Now clear ListViews 0
            _GUICtrlListView_BeginUpdate($hLV_C0)
            _GUICtrlListView_DeleteAllItems($hLV_C0)
            ; And reload with all / the top 20 elements in the main array
            For $i = 0 To UBound($aGUT) - 1
                If $i < 13 Then
                    GUICtrlCreateListViewItem($aGUT[$i], $hLV_C0)
                EndIf
            Next
            _GUICtrlListView_EndUpdate($hLV_C0)
            GUICtrlCreateListViewItem($sNumber, $hLV_C1)
            _GUICtrlListView_SimpleSort($hLV_C1,$g_bSortSense,0,False)
        Else
            For $iColumnIndex = 0 to UBound($aSearchListview) -1
                Local $iIndex = _GUICtrlListView_FindItem($aSearchListview[$iColumnIndex],-1,$sNumber)
                If $iIndex <> -1 Then
                    MsgBox(0,'Found',$aSearchListview[$iColumnIndex])
                Else
                    MsgBox(0,'Not Found',$aSearchListview[$iColumnIndex])
                EndIf
            Next
        EndIf
        $bProceed = False
        $sNumber = ''
    EndIf
Until $idMsg = $GUI_EVENT_CLOSE

This will produce the error. I'm searching in listview ["$hLV_C1","$hLV_C3","$hLV_C5"], but I know that my number is only in $hLV_C1 2nd time I press the AutoIT logo.

 

Press AutoIT logo and you will see number 2 is moved from one LV0 to LV1.


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites
  1. your array $aSearchListview holds strings, it must be the ControlID's
  2. _GUICtrlListView_FindItem is not the func you need use _GUICtrlListView_FindText
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

Local $aGUT[0]
Local $aSearchListview[3] = ["$hLV_C1","$hLV_C3","$hLV_C5"]
Local $MainGUIForm = GUICreate("My GUI",455,600)
Local $hHeader, $sNumber, $g_bSortSense = False

    For $i = 0 To 90
        _ArrayAdd($aGUT, $i)
    Next
    GUICtrlCreateTabItem("R/B")
    $hLV_RB = GUICtrlCreateListView('Test', 50, 100, 94, 255, $LVS_NOCOLUMNHEADER)

    ; Now calculate ListView 2 vertical size
    $hHeader = _GUICtrlListView_GetHeader($hLV_RB)
    $aSize = WinGetPos($hHeader)
    $iHeaderHeight = $aSize[3] ; Header height
    $aRect = _GUICtrlListView_GetItemRect($hLV_RB, 0)
    $iItemHeight = $aRect[3] - $aRect[1] ; Item height
    $iTotalHeight = $iHeaderHeight + (20 * ($iItemHeight + .5)) -10 ; Allow for the inter-item gaps
    $hLV_C0 = GUICtrlCreateListView('0', 185, 40, 50, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C0, 0, $LVSCW_AUTOSIZE)
    For $i = 0 To 12
        GUICtrlCreateListViewItem( $i, $hLV_C0)
    Next
    $hLV_C1 = GUICtrlCreateListView('0', 245, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C1, 0, $LVSCW_AUTOSIZE)
    $hLV_C2 = GUICtrlCreateListView('0', 275, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C2, 0, $LVSCW_AUTOSIZE)
    $hLV_C3 = GUICtrlCreateListView('0', 305, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C3, 0, $LVSCW_AUTOSIZE)
    $hLV_C4 = GUICtrlCreateListView('0', 335, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C4, 0, $LVSCW_AUTOSIZE)
    $hLV_C5 = GUICtrlCreateListView('0', 365, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C5, 0, $LVSCW_AUTOSIZE)
    $hLV_C6 = GUICtrlCreateListView('0', 395, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C6, 0, $LVSCW_AUTOSIZE)
    $hLV_C7 = GUICtrlCreateListView('0', 425, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C7, 0, $LVSCW_AUTOSIZE)

Local $id0 = GUICtrlCreatePic("C:\Program Files (x86)\AutoIt3\Examples\GUI\logo4.gif", 0, 0, 169, 68)
$aSearchListview[0]=$hLV_C1
$aSearchListview[1]=$hLV_C3
$aSearchListview[2]=$hLV_C5

GUISetState(@SW_SHOW)

$bProceed = False
Do
    $idMsg = GUIGetMsg()
    Switch $idMsg
        Case $id0
            $sNumber = '1'
            $bProceed = True
    EndSwitch
    If $bProceed Then
        $iIndex = _ArraySearch($aGUT, $sNumber)
        If $iIndex <> - 1 Then
            ; Delete it
            _ArrayDelete($aGUT, $iIndex)
            ; Now clear ListViews 0
            _GUICtrlListView_BeginUpdate($hLV_C0)
            _GUICtrlListView_DeleteAllItems($hLV_C0)
            ; And reload with all / the top 20 elements in the main array
            For $i = 0 To UBound($aGUT) - 1
                If $i < 13 Then
                    GUICtrlCreateListViewItem($aGUT[$i], $hLV_C0)
                EndIf
            Next
            _GUICtrlListView_EndUpdate($hLV_C0)
            GUICtrlCreateListViewItem($sNumber, $hLV_C1)
            _GUICtrlListView_SimpleSort($hLV_C1,$g_bSortSense,0,False)
        Else
            For $iColumnIndex = 0 to UBound($aSearchListview) -1
                Local $iIndex = _GUICtrlListView_FindText($aSearchListview[$iColumnIndex],$sNumber,-1,False)
                If $iIndex <> -1 Then
                    MsgBox(0,'Found',$aSearchListview[$iColumnIndex])
                Else
                    MsgBox(0,'Not Found',$aSearchListview[$iColumnIndex])
                EndIf
            Next
        EndIf
        $bProceed = False
        $sNumber = ''
    EndIf
Until $idMsg = $GUI_EVENT_CLOSE

your Piccontrol can cause troubles: if the path to pic is incorect a endless searching is done.

Share this post


Link to post
Share on other sites

Aha, of course. Doh.

 

Thank you.


Yours sincerely

Kenneth.

Share this post


Link to post
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

  • Similar Content

    • tcox8
      By tcox8
      Hello,
      Currently I am running a script that calls a powershell script. To read the results of that I am reading StdOut. I am parsing things accordingly but unfortunately it doesn't parse correctly all the time and I end up missing parts of the string or other problems. My question then is, what is the best results for reading what is returned when running a powershell script or something similar?
    • Valnurat
      By Valnurat
      I hope my title is good enough.
      I'm using the ADO UDF and I have question regarding editing SQL records with this UDF.
      The owner of the UDF suggested an idea, but maybe there is another trix.
    • Valnurat
      By Valnurat
      I have a SQL db. I would like to view the content in a control. Like a table. The control should have the option to show every 2nd line in another color. When you pick a "cell" it should pick the whole row. When you dobbelt click on the row another windows should popup with the content from the row.
      What view control can do that?
    • Valnurat
      By Valnurat
      How do I access a sql database for inserting and reading?
    • Valnurat
      By Valnurat
      I'm trying to get some info from dell.com page. I use a servicetag to find the computer. From the computerinfo I would like to get the "Shipping Date", but the date is on the next "cell".
      I have done this and I don't know if this is correct aproach, but I do get some info out.
      I just don't know how to "jump" to the next cell.
       
      #include <IE.au3> #include <MsgBoxConstants.au3> Local $oIE = _IECreate("http://www.dell.com/support/home/dk/da/dkbsdt1/product-support/servicetag/gnn5f12/configuration") Local $oTds = _IETagNameGetCollection($oIE, "td") Local $sTxt = "" For $oTd In $oTds $sTxt &= $oTd.innertext & @CRLF Next MsgBox($MB_SYSTEMMODAL, "Form Input Type", " Types :" & @CRLF & $sTxt) _IEQuit($oIE) I have seen something like this in VBscript
      Cell.NextSibling.NextSibling.innertext Is there someone who could help me.