alle Items vom Treeview auflisten

  • Hi,
    ich versuche alles Items eines Treeviews aufzulisten.
    Es sollen auch die Subitems aufgelistet werden.

    Leider gelingt mir dies nicht so ganz.
    Wer hat da Tipps für mich :huh:

    Spoiler anzeigen
    [autoit]

    #include <GuiTreeView.au3>
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $h = 0
    Dim $zurueck = 0
    Dim $hNewItem

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate('TreeView-(Un)Checked-Example', 400, 600)
    Global $hTreeView = GUICtrlCreateTreeView(5, 5, 390, 590, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
    Global $hRoot = GUICtrlCreateTreeViewItem('Root', $hTreeView)
    _GUICtrlTreeView_SetBold($hTreeView, $hRoot)
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 1 To 3
    $hItem1 = _GUICtrlTreeView_AddChild($hTreeView, GUICtrlGetHandle($hRoot), StringFormat('[%02d] Child 1st Gen.', $x))
    For $y = 1 To 3
    $hItem2 = _GUICtrlTreeView_AddChild($hTreeView, $hItem1, StringFormat('[%02d] Child 2nd Gen.', $y))
    For $z = 1 To 2
    $hItem3 = _GUICtrlTreeView_AddChild($hTreeView, $hItem2, StringFormat('[%02d] Child 3rd Gen.', $z))
    Next
    Next
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)
    _GUICtrlTreeView_Expand($hTreeView)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _auslesen($hTreeView, 0)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _auslesen($hTreeView, $hItem)
    Do
    If $h = 0 Then
    $hItem = _GUICtrlTreeView_GetFirstItem($hTreeView)
    ConsoleWrite("Erstes " & _GUICtrlTreeView_GetText($hTreeView, $hItem) & @CRLF)
    $h = 1
    $hNewItem = $hItem
    ElseIf $zurueck = 0 Then
    $hNewItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
    $erstes_kind = $hItem
    If $hNewItem Then ConsoleWrite("erstes Kind " & _GUICtrlTreeView_GetText($hTreeView, $hNewItem) & @CRLF)
    ElseIf $zurueck = 1 Then
    $hNewItem = _GUICtrlTreeView_GetNextSibling($hTreeView, $hItem)
    If $hNewItem Then ConsoleWrite("weiteres Kind " & _GUICtrlTreeView_GetText($hTreeView, $hNewItem) & @TAB & @TAB & _GUICtrlTreeView_GetText($hTreeView, $hItem) & @CRLF)
    $zurueck = 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $hNewItem Then
    _auslesen($hTreeView, $hNewItem)
    Else
    $zurueck = 1
    $hItem = $erstes_kind
    ;~ ConsoleWrite(@CRLF & _GUICtrlTreeView_GetText($hTreeView, $hNewItem ) & @CRLF)
    EndIf
    Until Not $hNewItem
    EndFunc ;==>_auslesen

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit]
  • Ist doch eig. ganz leicht oder? Also ich hab es so gemacht, da werden auch die SubItems angezeigt!

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form1", 410, 443, 303, 219)
    $TreeView1 = GUICtrlCreateTreeView(27, 24, 190, 244)
    $TreeView1_0 = GUICtrlCreateTreeViewItem("Test", $TreeView1)
    $TreeView1_1 = GUICtrlCreateTreeViewItem("Unterelement", $TreeView1_0)
    $TreeView1_2 = GUICtrlCreateTreeViewItem("Test2", $TreeView1)
    $TreeView1_3 = GUICtrlCreateTreeViewItem("Test3", $TreeView1)
    $Button1 = GUICtrlCreateButton("Items", 138, 282, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Items($TreeView1)
    EndSwitch
    WEnd
    Func _Items($hTree)
    For $A = 1 To _GUICtrlTreeView_GetCount($hTree)
    $Text = _GUICtrlTreeView_GetText($hTree,$A +3)
    MsgBox (0,"",$Text)
    Next
    EndFunc

    [/autoit]

    EDIT:
    Update, so kann man die Unterelemente auch erkenne, also das es unterelemente sind!

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form1", 410, 443, 303, 219)
    $TreeView1 = GUICtrlCreateTreeView(27, 24, 190, 244)
    $TreeView1_0 = GUICtrlCreateTreeViewItem("Test", $TreeView1)
    $TreeView1_1 = GUICtrlCreateTreeViewItem("Unterelement", $TreeView1_0)
    $TreeView1_2 = GUICtrlCreateTreeViewItem("Test2", $TreeView1)
    $TreeView1_3 = GUICtrlCreateTreeViewItem("Test3", $TreeView1)
    $TreeView1_4 = GUICtrlCreateTreeViewItem("Test4", $TreeView1)
    $Button1 = GUICtrlCreateButton("Items", 138, 282, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Items($TreeView1)
    EndSwitch
    WEnd
    Func _Items($hTree)
    For $A = 1 To _GUICtrlTreeView_GetCount($hTree)
    $Text = _GUICtrlTreeView_GetTree($hTree, $A +3)
    MsgBox (0,"",$Text)
    Next
    EndFunc

    [/autoit]

    mfg. Jam00

  • Hi BugFix,
    meinst du _GUICtrlTreeView_CreateDirectory (erstellt ein TreeView mit Verzeichnissen +Dateien)?
    Diese habe ich angeschaut, aber so ganz klappts noch nicht.
    Habs nochmal geändert.

    Spoiler anzeigen
    [autoit]

    #include <GuiTreeView.au3>
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate('TreeView-(Un)Checked-Example', 400, 600)
    Global $hTreeView = GUICtrlCreateTreeView(5, 5, 390, 590, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
    Global $hRoot = GUICtrlCreateTreeViewItem('Root', $hTreeView)
    Global $hRoot2 = GUICtrlCreateTreeViewItem('Root2', $hTreeView)
    Global $hRoot3 = GUICtrlCreateTreeViewItem('Root3', $hTreeView)
    _GUICtrlTreeView_SetBold($hTreeView, $hRoot)
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 1 To 3
    $hItem1 = _GUICtrlTreeView_AddChild($hTreeView, GUICtrlGetHandle($hRoot), StringFormat('[%02d] Child 1st Gen.', $x))
    For $y = 1 To 3
    $hItem2 = _GUICtrlTreeView_AddChild($hTreeView, $hItem1, StringFormat('[%02d] Child 2nd Gen.', $y))
    For $z = 1 To 2
    $hItem3 = _GUICtrlTreeView_AddChild($hTreeView, $hItem2, StringFormat('[%02d] Child 3rd Gen.', $z))
    Next
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $x = 1 To 5
    $hItem1 = _GUICtrlTreeView_AddChild($hTreeView, GUICtrlGetHandle($hRoot2), StringFormat('[%02d] Child 1st Gen.', $x))
    For $y = 1 To 2
    $hItem2 = _GUICtrlTreeView_AddChild($hTreeView, $hItem1, StringFormat('[%02d] Child 2nd Gen.', $y))
    For $z = 1 To 4
    $hItem3 = _GUICtrlTreeView_AddChild($hTreeView, $hItem2, StringFormat('[%02d] Child 3rd Gen.', $z))
    Next
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $x = 1 To 3
    $hItem1 = _GUICtrlTreeView_AddChild($hTreeView, GUICtrlGetHandle($hRoot3), StringFormat('[%02d] Child 1st Gen.', $x))
    For $y = 1 To 3
    $hItem2 = _GUICtrlTreeView_AddChild($hTreeView, $hItem1, StringFormat('[%02d] Child 2nd Gen.', $y))
    For $z = 1 To 2
    $hItem3 = _GUICtrlTreeView_AddChild($hTreeView, $hItem2, StringFormat('[%02d] Child 3rd Gen.', $z))
    Next
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlTreeView_EndUpdate($hTreeView)
    _GUICtrlTreeView_Expand($hTreeView)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _treeview_auslesen($hTreeView)

    [/autoit] [autoit][/autoit] [autoit]

    Func _treeview_auslesen($hTreeView)
    $hItem2 = _GUICtrlTreeView_GetFirstItem($hTreeView)
    ;~ ConsoleWrite(_GUICtrlTreeView_GetText($hTreeView, $hItem2) & @CRLF)
    If $hItem2 Then _treeview_auslesen_zusatz($hTreeView, $hItem2)
    Do
    $hItem2 = _GUICtrlTreeView_GetNextSibling($hTreeView, $hItem2)
    ;~ ConsoleWrite(_GUICtrlTreeView_GetText($hTreeView, $hItem2) & @CRLF)
    If $hItem2 Then _treeview_auslesen_zusatz($hTreeView, $hItem2)
    Until Not $hItem2
    EndFunc ;==>_treeview_auslesen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _treeview_auslesen_zusatz($hTreeView, $hItem)
    Do
    $hNewItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
    If $hNewItem Then _treeview_auslesen_zusatz($hTreeView, $hNewItem)
    ConsoleWrite("Erstes " & _GUICtrlTreeView_GetText($hTreeView, $hItem) & @CRLF)
    $hItem = _GUICtrlTreeView_GetNextChild($hTreeView, $hItem)
    Until $hItem = 0
    EndFunc ;==>_treeview_auslesen_zusatz

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd;### Tidy Error -> for is never closed in your script.

    [/autoit]

    Hi Jam00,
    deine Funcs funktionieren scheinbar bei mir nicht 8| .
    Es wird nur der Text der obersten Item zurückgegeben :sleeping:
    Vermutlich weil ich die Items mit _GUICtrlTreeView_AddChild hinzufüge.
    Wäre ja auch zu einfach gewesen :whistling:

    • Offizieller Beitrag

    Hi Tweaky,
    wenn alles ausgeklappt ist und du möchtest die Werte aller Einträge lesen, arbeite mit _GetNext

    [autoit]

    Func _auslesen($hTreeView, $hItem)
    $hItem = _GUICtrlTreeView_GetFirstItem($hTreeView)
    ConsoleWrite("Erstes " & _GUICtrlTreeView_GetText($hTreeView, $hItem) & @CRLF)
    While True
    $hItem = _GUICtrlTreeView_GetNext($hTreeView, $hItem)
    If $hItem = 0 Then ExitLoop
    ConsoleWrite("Nächstes " & _GUICtrlTreeView_GetText($hTreeView, $hItem) & @CRLF)
    WEnd
    EndFunc

    [/autoit]
  • Hi BugFix,
    danke dies ist die Lösung.
    War doch einfacher als ich gedacht habe :D

    Zitat

    wenn alles ausgeklappt ist


    Es geht aber auch wenn nur "Root", "Root2" und "Root3" sichtabr sind und der Rest zugeklappt ist.
    Oder meinst du was anderes?

  • So kannst du auch die "Einzüge" mitgeben, weil rekursiv

    Achtung: muß so gestartet werden:

    [autoit]

    _auslesen($hTreeView,_GUICtrlTreeView_GetFirstItem($hTreeView))

    [/autoit][autoit]

    Func _auslesen($hTreeView,$hParent,$sTab="")
    For $i=1 To _GUICtrlTreeView_GetSiblingCount($hTreeView, $hParent)
    If $hParent<>0 Then
    ConsoleWrite($sTab & _GUICtrlTreeView_GetText($hTreeView, $hParent) & @LF)
    _auslesen($hTreeView,_GUICtrlTreeView_GetFirstChild ($hTreeView,$hParent),$sTab & " ")
    EndIf
    $hParent=_GUICtrlTreeView_GetNextSibling($hTreeView,$hParent)
    Next
    EndFunc

    [/autoit]

    lgE