- Offizieller Beitrag
Mir ist gerade ein Bug aufgefallen. Ich möchte bei einem Treeview nur den ersten (Root) Zweig aufklappen.
Hier mal das Script dazu:
#include <GuiTreeView.au3>
#include <TreeViewConstants.au3>
#include <WinAPI.au3>
Global $hGui = GUICreate('Test', 400, 200)
Global $idTreeview = GUICtrlCreateTreeView(10, 10, 380, 180)
Global $hTreeview = GUICtrlGetHandle($idTreeview)
Global $hRoot = _GUICtrlTreeView_Add($hTreeview, 0, 'Root')
Global $hAAA = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'AAA')
_GUICtrlTreeView_AddChild($hTreeview, $hAAA, 'AA')
_GUICtrlTreeView_AddChild($hTreeview, $hAAA, 'AA')
Global $hBBB = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'BBB')
_GUICtrlTreeView_AddChild($hTreeview, $hBBB, 'BB')
_GUICtrlTreeView_AddChild($hTreeview, $hBBB, 'BB')
Global $hCCC = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'CCC')
_GUICtrlTreeView_AddChild($hTreeview, $hCCC, 'CC')
_GUICtrlTreeView_AddChild($hTreeview, $hCCC, 'CC')
GUISetState()
_GUICtrlTreeView_SetState($hTreeview, $hRoot, $TVIS_EXPANDED, True)
Do
Until GUIGetMsg() = -3
Exit
Alles anzeigen
dabei passiert folgendes:
Vorne steht ein [-], aber der Baum wird nicht angezeigt. Füge ich nach _GUICtrlTreeView_SetState ein _WinAPI_InvalidateRect($hGui) ein, dann wird der Baum zumindest dargestellt: Treeview-Bug2.png
Aber man kann die Zweige ("AAA", "BBB", "CCC") nicht anklicken. Weder markieren noch mit Klick auf das [+] weiter öffnen. Erst wenn man Root zuklappt und wieder aufklappt, sind die Zweige wieder anklickbar.
Ich vermute den Fehler bei _GUICtrlTreeView_SetState, denn es gibt einen Workaround:
#include <GuiTreeView.au3>
#include <TreeViewConstants.au3>
#include <WinAPI.au3>
Global $hGui = GUICreate('Test', 400, 200)
Global $idTreeview = GUICtrlCreateTreeView(10, 10, 380, 180)
Global $hTreeview = GUICtrlGetHandle($idTreeview)
Global $hRoot = _GUICtrlTreeView_Add($hTreeview, 0, 'Root')
Global $hAAA = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'AAA')
_GUICtrlTreeView_AddChild($hTreeview, $hAAA, 'AA')
_GUICtrlTreeView_AddChild($hTreeview, $hAAA, 'AA')
Global $hBBB = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'BBB')
_GUICtrlTreeView_AddChild($hTreeview, $hBBB, 'BB')
_GUICtrlTreeView_AddChild($hTreeview, $hBBB, 'BB')
Global $hCCC = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'CCC')
_GUICtrlTreeView_AddChild($hTreeview, $hCCC, 'CC')
_GUICtrlTreeView_AddChild($hTreeview, $hCCC, 'CC')
GUISetState()
_SendMessage($hTreeview, $TVM_EXPAND, $TVE_EXPAND, $hRoot, 0, 'wparam', 'handle') ; <- Workaround
Do
Until GUIGetMsg() = -3
Exit
Alles anzeigen
Ach, und _GUICtrlTreeView_Expand hilft mir nicht weiter, weil ich nicht alle Zweige aufklappen will.
Wie gesagt, ich habe bereits einen "Workaround" gefunden. Ich wollte es euch nur mitteilen, falls jemand mit dem gleichen Fehler kämpft.