Page 1 sur 1
[R]Retrouver l'affichage vierge d'une ComboBox
Posté : dim. 11 févr. 2018 10:35
par GMH
Bonjour,
Je ne parviens pas trouver, parmi toutes les fonctions concernant les ComboBox, celle qui permettrait d'effacer la dernière valeur choisie pour afficher une ComboBox vierge, sans, bien sûr, supprimer l'item de la liste déroulante. Existe-t-elle ?
Je vous remercie.
Re: [..]Retrouver l'affichage vierge d'une ComboBox
Posté : dim. 11 févr. 2018 17:53
par walkson
Bonjour,
Le plus simplement du monde
#include <ComboConstants.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=Global $Form1 = GUICreate("Form1", 615, 438, 192, 124)Global $Combo1 = GUICtrlCreateCombo("", 96, 16, 257, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))GUICtrlSetData(-1, " |aa|bb|cc"," ")GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Combo1 MsgBox(0,"",GUICtrlRead($Combo1)) GUICtrlSetData($Combo1," ") EndSwitchWEnd
Re: [..]Retrouver l'affichage vierge d'une ComboBox
Posté : dim. 11 févr. 2018 18:13
par GMH
Bonsoir,
Merci pour votre réponse.
Je vois que je n'obtenais pas satisfaction parce que je n'incluais pas l'item vide dans ma liste déroulante, comme vous l'avez fait.
Curieusement, la ComboBox ne se vide pas lors de sa première utilisation . La valeur choisie reste affichée. Aux choix suivants, la ComboBox se vide bien.
Je construis ma ComboBox comme ceci :
Code : Tout sélectionner
Global $comboE = GUICtrlCreateCombo("", 580, 770, 250, 20)
GUICtrlSetData($comboE, " |"," ")
For $i=0 To Ubound($motsE)-1
GUICtrlSetData($comboE,$motsE[$i] & "|")
Next
Voyez-vous l'origine du problème ?
Re: [..]Retrouver l'affichage vierge d'une ComboBox
Posté : dim. 11 févr. 2018 18:27
par GMH
Ca se passe mieux avec la fonction _GUICtrlComboBox_InsertString : La ComboBox se vide dès le premier clic. Mais ma liste déroulante compte plusieurs items vides plutôt qu'un.
Code : Tout sélectionner
Global $comboE = GUICtrlCreateCombo("", 580, 770, 250, 20)
GUICtrlSetData($comboE, " |"," ")
For $i=0 To Ubound($motsE)-1
_GUICtrlComboBox_InsertString($comboE,$motsE[$i])
Next
Re: [..]Retrouver l'affichage vierge d'une ComboBox
Posté : dim. 11 févr. 2018 19:01
par walkson
Re: [..]Retrouver l'affichage vierge d'une ComboBox
Posté : dim. 11 févr. 2018 19:29
par GMH
Ce qui semble marcher le mieux est :
Code : Tout sélectionner
Local $item = " |"
For $i=0 To Ubound($motsE)-1
$item &= $motsE[$i] & "|"
Next
GUICtrlSetData($comboE, $item," ")
Il me reste toutefois 4 items vides en tête de la liste déroulante au lieu d'une seule.
Si je code simplement
Local $item plutôt que
Local $item = " |" , je n'ai que 2 items vides, mais au premier clic sur la liste déroulante, la ComboBox ne se vide pas. Aux clics suivants, elle se vide.
Re: [..]Retrouver l'affichage vierge d'une ComboBox
Posté : lun. 12 févr. 2018 00:52
par walkson
On dirait que les combos vous font la misère
Moi, avec ce code, je n'ai pas de problème
#include <ComboConstants.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=Global $Form1 = GUICreate("Form1", 615, 438, 192, 124)Global $Combo1 = GUICtrlCreateCombo("", 96, 16, 257, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))Local $motsE[7]= [4,5,6,7,8,9,10]Local $itemFor $i=0 To Ubound($motsE)-1 $item &= $motsE[$i] & "|"NextGUICtrlSetData($Combo1, $item & " "," ")GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Combo1 MsgBox(0,"",GUICtrlRead($Combo1)) GUICtrlSetData($Combo1," ") EndSwitchWEnd
RMQ: j'ai mis l'espace à la fin car $item se termine par "|"
Re: [R]Retrouver l'affichage vierge d'une ComboBox
Posté : lun. 12 févr. 2018 09:10
par GMH
Bonjour walkson et merci encore,
Votre code fonctionne très bien en effet. Je l'ai testé dans mon programme, le ComboBox se vide dès le premier clic sur un item. Il restait le souci des items vides (deux) dans la liste déroulante. Après tâtonnements, j'ai fait partir la boucle de construction de la liste à 2 plutôt qu'à 0. Et maintenant je n'ai plus d'items vides. Mon problème semble résolu :
Code : Tout sélectionner
Global $comboE = GUICtrlCreateCombo("", 580, 770, 250, 20, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
Local $item
For $i=2 To Ubound($motsE)-1
$item &= $motsE[$i] & "|"
Next
GUICtrlSetData($comboE, $item & " "," ")
Grand merci pour votre temps et votre patience.