Page 1 sur 1

[R] Listview avec case à cocher mais indépendante

Posté : ven. 17 avr. 2015 13:43
par franco
Bonjour.

Je sais faire les listview avec des checkbox.
Le souci : j'aimerais qu'une seule case soit cochée.

Plus précisément, je ne veux pas qu'on puisse cocher plusieurs cases à la fois.
En gros, si une case est cochée, les autres sont automatiquement décochées.

Est-ce possible ?


Mon script est déjà codé.
Je vous joins un script minimaliste :
► Afficher le textecode
Et le script détaillé :
► Afficher le textecode

Merci de m'éclairer ma petite lanterne. :)


++

Re: [..] Listview avec case à cocher mais indépendante

Posté : ven. 17 avr. 2015 14:52
par jbnh
Bon c'est pas terrible terrible, mais ca pourrait donner une piste :

Code : Tout sélectionner

#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>


Global $Form1 = GUICreate("Form1", 466, 120, 192, 124)
$DNS_LV = GUICtrlCreateListView("test1|test2|test3",10,10,400,100, -1, $LVS_EX_CHECKBOXES + $WS_EX_CLIENTEDGE + $LVS_EX_GRIDLINES)
$one = GUICtrlCreateListViewItem("1|2|3",$DNS_LV)
$two = GUICtrlCreateListViewItem("4|5|6",$DNS_LV)
$three = GUICtrlCreateListViewItem("7|8|9",$DNS_LV)
GUISetState(@SW_SHOW)


While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE  
   Exit
  Case $one
      If _IsChecked($one) Then
          GUICtrlSetState ($two, $GUI_UNCHECKED)
          GUICtrlSetState ($three, $GUI_UNCHECKED)
      endif 
 EndSwitch
WEnd
 
Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked
Par contre l'unicité d'un check est gérée par les radio button...

Re: [..] Listview avec case à cocher mais indépendante

Posté : ven. 17 avr. 2015 15:25
par walkson
Une autre solution toujours pas terrible
► Afficher le texte
[Edit] peut être mieux ainsi surtout s'il y a beaucoup d'items

Code : Tout sélectionner

        Case $aa To $cc
            $y = 0
            For $i = $aa To $cc
                If $i = $nMsg Then ExitLoop
                $y += 1
            Next
            _GUICtrlListView_SetItemChecked ( $DNS_LV, -1,False  )
            _GUICtrlListView_SetItemChecked ( $DNS_LV, $y,True  )

Re: [..] Listview avec case à cocher mais indépendante

Posté : ven. 17 avr. 2015 15:35
par franco
Salut à tous et merci de m'avoir répondu.

Le seul souci, c'est que je ne sais pas combien j'aurais d'item dans ma listview.


Du coup, je voulais utiliser ces deux fonctions :
_GUICtrlListView_GetItemChecked
_GUICtrlListView_SetItemChecked

En faisant comme ceci :
- Je détecte l'item sélectionné
- Je décoche donc les items précédents
- Je décoche donc les items suivants

Dans le cas présent, j'ai détecté l'item sélectionné.
Puis j'ai tout désélectionné.
Pour enfin resélectionner l'item détecté.

Et donc, faut que je mette cela dans la boucle while 1


Un exemple :
► Afficher le textecode
Le seul souci : si je coche la 1, puis la 2, puis la 3(etc), ca fonctionne...
Le reste se décoche.

Mais si je coche la 2, je ne peux pas cocher la 1 : ça reste cocher sur la 2.


Une idée ?


Merci. ;)

Re: [..] Listview avec case à cocher mais indépendante

Posté : ven. 17 avr. 2015 16:23
par walkson
et par cette méthode ?
► Afficher le texte
Il suffit de créer un array à la dimension de _FileCountLines($FileKeyInterfaces) selon votre code
Ce serait moins énergivore que d'écouter en permanence la listview (à mon humble avis)

Re: [..] Listview avec case à cocher mais indépendante

Posté : ven. 17 avr. 2015 16:50
par franco
Resalut :D


Merci Walkson !!


Ton dernier script m'a donné la solution : un grand merci.
J'ai pu l'adapter à mon script de départ.

Et ça fonctionne.
Et oui.. Moins (beaucoup moins) énergivore. :o


Voici le script :
► Afficher le textecode
Je passe en Résolu.

Merci à tous. :wink: