voila un an que j'ai cherché sur internet une méthode de checkall-uncheckall sur une treeviewlist, et j'ai jamais trouvé.
Au final j'ai décidé de développer il y a peu la fonction que bon nombre cherche sans trouver et le voici.
Le code ci-dessous contient un exemple complet.
Pour ll'integrer à votre treeview, il suffit de copier Dim $checkverif[1][2], les 2 fonctions, la variable $declared. Puis d'appeler les fonctions CheckAll_UncheckALL_Declaration avant le "while 1" et CheckAll_UncheckALL_Execution à l'intérieur du "While 1"
CheckAll_UncheckALL_Declaration(nom_de_la_treeview)
CheckAll_UncheckALL_Execution(nom_de_la_treeview, tableau_de_déclaration)
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>
Dim $checkverif[1][2]
Func CheckAll_UncheckALL_Declaration($tree)
;Création des variables de vérification d'état coché
;---------------------------------------------------
;~ Ce code est une partie du checkall et uncheckall.
;~ Plus bas dans le code, quelques lignes permettent de cocher tous les efants d'un noeud si celui-ci est lui meme coché.
;~ Malheureusement, lorsqu'un neoud est coché, tous les enfants sont cochés et deviennent donc impossible à décocher par la suite parce que le noeud parent est coché.
;~ Ce est donc là pour mettre en place une vérification de différence d'état.
;~ On établi des variables de vérification avec pour valeur "false".
;~ Si le noeud et la variable de vérification sont identiques, le code ne fera rien, si ils sont différents, le code agira.
;~ Chaque noeuds parents de dernier niveau se verront attribué une variable véréfication
;cette premiere partie va déterminer si le premier élément visible est un parent et creer la premiere ligne du tableau
$firstvisible = _GUICtrlTreeView_GetFirstVisible($tree) ;On récupère l'identifiant du premier élément visible
$countverif = 0
if _GUICtrlTreeView_GetChildren($tree, $firstvisible) Then ;si le premier élément visible a des enfants
$checkverif[$countverif][0] = $firstvisible ;on inscrit l'identification de l'élément dans le tableau colonne 1
$checkverif[$countverif][1] = False ;on inscrit l'état dela vérification dans le tableau colonne 2
$countverif = $countverif + 2 ;on ajoute 2 à la variable pour redimensionner le tableau correctement
ReDim $checkverif[$countverif][2] ;on redimensionne le tableau
$countverif = $countverif - 1 ;On soustrait 1 à $countverif pour replacer le curseur de lecture au bon endroit
EndIf
;cette partie s'occupe de tous les autres parents
$getnext = _GUICtrlTreeView_GetNext($tree, $firstvisible) ;On récupère l'identifiant du second élément dans l'arborescence
While $getnext <> 0
if _GUICtrlTreeView_GetChildren($tree, $getnext) Then
$checkverif[$countverif][0] = $getnext
$checkverif[$countverif][1] = False
$countverif = $countverif + 2
ReDim $checkverif[$countverif][2]
$countverif = $countverif - 1
EndIf
$getnext = _GUICtrlTreeView_GetNext($tree, $getnext)
WEnd
_ArrayDelete($checkverif, $countverif) ;On supprime la derniere ligne qui est vide
Return $checkverif
EndFunc
Func CheckAll_UncheckALL_Execution($tree, $checkverif)
$countverif = UBound($checkverif)-1
;~ Cette boucle permet la fonction checkall et uncheck all pour tous les ordinateurs affectés à un sous-tag
For $i = 0 to $countverif Step 1 ;on lance la boucle
$state = _GUICtrlTreeView_GetChecked($tree, $checkverif[$i][0]) ;On récupère l'état du noeud, soit True, soit False. cet état sera déployé à la suite du code
if $state <> $checkverif[$i][1] Then ;Si l'ID du noeud sélectionné est egal à la valeur inscrit dans la colonne 1 du tableau et si la valeur de la variable $state est différente de la valeur de la colonne 2
$checkverif[$i][1] = _GUICtrlTreeView_GetChecked($tree, $checkverif[$i][0])
$firstchild = _GUICtrlTreeView_GetFirstChild($tree, $checkverif[$i][0]) ;on récupère l'id du premier enfant du noeud
_GUICtrlTreeView_Expand($tree, $checkverif[$i][0]) ;on déploie l'arborescence du noeud
_GUICtrlTreeView_SetChecked($tree, $firstchild, $state) ;on coche ou décoche selon $state le premier enfant du noeud
$child = _GUICtrlTreeView_GetNextSibling($tree, $firstchild) ;on récupère l'id de l'enfant suivant
while _GUICtrlTreeView_GetNextSibling($tree, $child) <> 0 ;Tant que l'id de la cible suivante ne retourne pas 0
_GUICtrlTreeView_SetChecked($tree, $child, $state) ;on coche ou décoche selon $state l'enfant suivant du noeud
$child = _GUICtrlTreeView_GetNextSibling($tree, $child) ;on récupère l'id de l'enfant suivant
WEnd
_GUICtrlTreeView_SetChecked($tree, $child, $state) ;on coche ou décoche selon $state la derniere cible enfant du noeud
$checkverif[$i][1] = $state ;On inscrit la changement de valeur dans le tableau colonne 2
EndIf
Next
$declared = $checkverif ;On réécrit le résultat de $déclared pour conserver le nouvel $checkverif
Return $declared
EndFunc
;~ Déclaration des variables
Local $GUI, $hImage, $iImage, $hItem, $fDragging = False, $aDrag, $hTreeView
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
;~ Création de la boite de dialogue
$GUI = GUICreate("TreeView Create Drage Image", 400, 300)
$hTreeView = GUICtrlGetHandle(GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE))
;~ Création d'une liste aléatoire
_GUICtrlTreeView_BeginUpdate($hTreeView)
For $x = 1 To Random(2, 10, 1)
$hItem = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x))
For $y = 1 To Random(2, 10, 1)
_GUICtrlTreeView_AddChild($hTreeView, $hItem, StringFormat("[%02d] New Child", $y))
Next
Next
_GUICtrlTreeView_EndUpdate($hTreeView)
$declared = CheckAll_UncheckALL_Declaration($hTreeView) ;Appel de la fonction
GUISetState() ;Afficher l'arborescence
While 1
CheckAll_UncheckALL_Execution($hTreeView, $declared) ;Appel de la fonction
$msg = GUIGetMsg()
if $msg = $GUI_EVENT_CLOSE Then
ExitLoop
EndIf
WEnd