Evenement ImageCombo non désiré

Résolu
cs_Talere
Messages postés
102
Date d'inscription
vendredi 29 mars 2002
Statut
Membre
Dernière intervention
14 février 2013
- 3 oct. 2006 à 10:12
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
- 3 oct. 2006 à 11:28
Bonjour,

J'utilise des imageCombo dans mon appli, et lorsque j'execute le code pas à pas, tout va bien. Le problème intervient lorsque j'execute rapidement le même code où un evenement intervient dans mon ImageCombo ... seulement, j'arrive pas à savoir lequel.

Code d'origine : (Choix_Site est mon ImageCombo)



Choix_Site.Text = "Toto"
Choix_Site_Change


' Je souhaiterais alors que si le texte fait partie de la liste, l'image combo pointe dessus (selectedItem), car il ne le fait pas par défaut.
' Pendant le fonctionnement en pas à pas, il n'appelle pas "Choix_Site_Change", alors qu'il le fait en rapide (je l'ai donc desactivé dans ce cas)

' Pour la procédure lié à mon Image Combo, voila ce que j'ai :

Private Sub Choix_Site_Change()
If alerte_choix(0) Then Exit Sub
alerte_choix(0) = True
Dim mon_choix As ComboItem
For Each mon_choix In Choix_Site.ComboItems
    If LCase(mon_choix.Text) = LCase(Choix_Site.Text) Then
        Set Choix_Site.SelectedItem = mon_choix
        Exit For
    End If
Next mon_choix
alerte_choix(0) = False
End Sub


' A priori, le "Set Choix_Site.SelectedItem = mon_choix" rapelle cette même procédure en rapide alors qu'elle ne le fait pas en pas à pas. C'est pour cela que j'ai installé le témoin au début mais cela ne sembla pas marcher.

Si quelqu'un peut m'aider, ça m'enleverrais une grosse épine du pied ...

Merci,

TALERE

9 réponses

cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
3 oct. 2006 à 10:23
alerte_choix est déclarée où et comment ???????

REPLEXE OBLIGATOIRE à prendre avec VB6 : mettre Option Explicit sur la première ligne de chaque feuille, module, classe, ...
Ca oblige à déclarer explicitement chaque variable utilisée, ça limite les mauvaises surprises.

Et en plus ici, pour que ça marche, alerte_choix doit etre déclarée en static
Static alerte_choix As Boolean

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_Talere
Messages postés
102
Date d'inscription
vendredi 29 mars 2002
Statut
Membre
Dernière intervention
14 février 2013

3 oct. 2006 à 10:35
il est declaré en tout debut de mon code ma feuille de la manière suivante : Dim alerte_choix(1) As Boolean
J'ai mis une dimension car j'ai deux imagecombo dans mon formulaire (plutot que d'utiliser deux noms ...)

Faut-il que je l'a déclare dans un module, ou est-ce que static dans ma feuille suffira ? je vois pas la différence entre les deux.

Merci,

TALERE
0
cs_Talere
Messages postés
102
Date d'inscription
vendredi 29 mars 2002
Statut
Membre
Dernière intervention
14 février 2013

3 oct. 2006 à 10:39
C'est bon, en déclarant en Static, dans la procédure, ça a marché ... Je vois désormais la différence entre static et public dim.

Encore merci ...

TALERE
0
cs_Talere
Messages postés
102
Date d'inscription
vendredi 29 mars 2002
Statut
Membre
Dernière intervention
14 février 2013

3 oct. 2006 à 10:41
J'ai oublié de dire qu'il fallait aussi rajouté un DoEvents après Set Choix_Site.SelectedItem = mon_choix
car l'évenament ne se produisait qu'à la fin de la procédure ( et donc le flag etait redevenu faux)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
3 oct. 2006 à 10:48
Non tu ne dois pas la voir, je pense pas.

Déclarer une variable Static à l'intérieur d'une procédure, permet de dire que à la fin de la procédure cette variable n'est pas détruite, elle est conservée en mémoire. Lors de l'appel suivant cette variable à garder la valeur précédente.

Déclarer une variable avec Dim en dehors de toute procédure, permet de la rendre globale au module ou elle est déclarée. Toutes les fonctions ou sub de ce module peuvent acceder à cette variable. Cette variable ne perd pas non plus sa valeur.

Déclarer une varible Public Dim en dehors de toute procédure, permet de rendre cette variable gobale à tout le projet . Idem elle ne perd pas sa valeur.

Si elle était déclaré en globale au module, ça aurait dû marcher.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_Talere
Messages postés
102
Date d'inscription
vendredi 29 mars 2002
Statut
Membre
Dernière intervention
14 février 2013

3 oct. 2006 à 10:57
Voila ce que j'ai fait, et ca marche ...

Private Sub Choix_Site_Change()
Static alerte_Site As Boolean
If alerte_Site Then Exit Sub
alerte_Site = True
Dim mon_choix As ComboItem
For Each mon_choix In Choix_Site.ComboItems
    If LCase(mon_choix.Text) = LCase(Choix_Site.Text) Then
        Set Choix_Site.SelectedItem = mon_choix
        DoEvents
        Exit For
    End If
Next mon_choix
alerte_Site = False
End Sub
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
3 oct. 2006 à 11:03
Oui, là ta variable est bien locale à ta procédure, donc visible que dans celle-ci et étant statique, elle est conservée en mémoire d'un appel à l'autre.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_Talere
Messages postés
102
Date d'inscription
vendredi 29 mars 2002
Statut
Membre
Dernière intervention
14 février 2013

3 oct. 2006 à 11:21
et donc elle n'est pas accessible à une autre procédure ... c'est quand même pratique ... cela veut dire que je peux avoir le même nom de variable dans plusieurs procédures sans que cela interagisse ? Si c'est le cas, ca va carrément m'arranger ...
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
3 oct. 2006 à 11:28
Oui de même si tu déclare une variable locale avec le même nom qu'une globale, c'est la locale qui est prise en compte.

Attention, à pratiquer avec retenue tout de même, ça peux compliquer la compréhension du code.
Ca passe pour des variables "génériques" style i, result ou tmp ...

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0