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 :mrgreen:
#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," ")
 EndSwitch
WEnd

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
ou bien comme ceci
Local $item
For $i=0 To Ubound($motsE)-1
    $item &= $motsE[$i] & "|"
Next
GUICtrlSetData($Combo1, $item & " "," ")

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 :mrgreen:
Moi, avec ce code, je n'ai pas de problème :P
#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 $item
For $i=0 To Ubound($motsE)-1
    $item &= $motsE[$i] & "|"
Next
GUICtrlSetData($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," ")
 EndSwitch
WEnd
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.