OVH Cloud OVH Cloud

listbox et click

7 réponses
Avatar
ludovic Taillez
Bonsoir,
voici mon probléme:
lorsque je lance ma form(form1_load()) j'ai dans mon code list1.listindex(0)
et cela genere l'évenment list1_Click qui lui méme exécute le code qu'il
contient mais je ne souhaite justement pas qu'il s'effectue.
Je voudrai l'exécuter uniquement lorsque je clique reellement sur la listbox
J'espére mettre bien fait comprendre
Je vous remercie d'avance pour votre solution.....!!!!
LT

7 réponses

Avatar
Jean-marc
ludovic Taillez wrote:
Bonsoir,
voici mon probléme:
lorsque je lance ma form(form1_load()) j'ai dans mon code
list1.listindex(0) et cela genere l'évenment list1_Click qui lui
méme exécute le code qu'il contient mais je ne souhaite justement pas
qu'il s'effectue. Je voudrai l'exécuter uniquement lorsque je clique
reellement sur la
listbox J'espére mettre bien fait comprendre
Je vous remercie d'avance pour votre solution.....!!!!
LT



Hello,

C'est tout simple : il suffit de protéger ta fonction
par un petit "chien de garde", qui s'assure de ne pas
exécuter le code de la fonction la première fois,
c'est à dire lors du form_load.

Pour cela, une simple variable statique et le tour est joué :

Private Sub Form_Load()
List1.AddItem "tutu"
List1.ListIndex = 0
End Sub

Private Sub List1_Click()

Static watchDog As Boolean

' protege la première fois (form_load)
If Not watchDog Then
watchDog = True
Exit Sub ' alors on quitte
End If
' toutes les autres fois

End Sub


C'est très classique en programmation.

Espérant que cela t'aide!

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Driss HANIB
Oui,

pour ma part j'utilise moi aussi un booléen que je mais à Vrai au début de
chargement de la feuille

exemple
Dim Init as boolean

Sub Form_Load
Init = true
-----

Init = false
End sub

et dans mes évènements je mets
if not init then

' exécution voulue..
end if


Driss

"Jean-marc" a écrit dans le message
de news:45b7bf15$0$2675$
ludovic Taillez wrote:
> Bonsoir,
> voici mon probléme:
> lorsque je lance ma form(form1_load()) j'ai dans mon code
> list1.listindex(0) et cela genere l'évenment list1_Click qui lui
> méme exécute le code qu'il contient mais je ne souhaite justement pas
> qu'il s'effectue. Je voudrai l'exécuter uniquement lorsque je clique
> reellement sur la
> listbox J'espére mettre bien fait comprendre
> Je vous remercie d'avance pour votre solution.....!!!!
> LT

Hello,

C'est tout simple : il suffit de protéger ta fonction
par un petit "chien de garde", qui s'assure de ne pas
exécuter le code de la fonction la première fois,
c'est à dire lors du form_load.

Pour cela, une simple variable statique et le tour est joué :

Private Sub Form_Load()
List1.AddItem "tutu"
List1.ListIndex = 0
End Sub

Private Sub List1_Click()

Static watchDog As Boolean

' protege la première fois (form_load)
If Not watchDog Then
watchDog = True
Exit Sub ' alors on quitte
End If
' toutes les autres fois

End Sub


C'est très classique en programmation.

Espérant que cela t'aide!

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/




Avatar
Jean-marc
"Driss HANIB" wrote in message
news:
Oui,

pour ma part j'utilise moi aussi un booléen que je mais à Vrai au début de
chargement de la feuille

exemple
Dim Init as boolean

Sub Form_Load
Init = true
-----

Init = false
End sub

et dans mes évènements je mets
if not init then

' exécution voulue..
end if



Oui le principe est le même.
Dans la pratique, on a peut être intérêt
pour la lisibilité du code à privilégier une
variable statique (car locale à la procédure).

Si tu emploies une globale, une habitude assez
courante (toujours pour la lisibilité) est de
la préfixer avec "G" ou "G_" (G comme globale).

DOnc tu fais un truc du genre :

' Initialization Watch_dog
Dim G_Init as Boolean

...
' Global Init Watch_dog
If Not G_init Then
...

Simple question de style :-)

--
Jean-marc
Avatar
Driss HANIB
Tu as raison Jean Marc,

J'ai toujours du mal à Préfixer comme conseillé..
C'est vrai que mes "essais' seraient un peu difficiles à relire par
d'autres. Je mets en tout cas toujours des nom "significatifs" pour mes
variables sausf classique I pour les itérations.
J'essaie bien sur de mettre le plus de variables en local..
Par contre, je ne sais pas si c'est bien, : je crée pas mas de Types
Spécifiques à mes besoins. je manie de nombreux tableaux de ces types et
pour l'instant cela me convient..
Quant aux collections , je "nage un peu" dans leur maniement ; j'en aurais
sans doute besoin dans mes classes mais bon..

Petit à petit je pense optimiser mes progs

Driss


"Jean-marc" a écrit dans le message de
news:epa7rd$dc0$

"Driss HANIB" wrote in message
news:
> Oui,
>
> pour ma part j'utilise moi aussi un booléen que je mais à Vrai au début


de
> chargement de la feuille
>
> exemple
> Dim Init as boolean
>
> Sub Form_Load
> Init = true
> -----
>
> Init = false
> End sub
>
> et dans mes évènements je mets
> if not init then
>
> ' exécution voulue..
> end if

Oui le principe est le même.
Dans la pratique, on a peut être intérêt
pour la lisibilité du code à privilégier une
variable statique (car locale à la procédure).

Si tu emploies une globale, une habitude assez
courante (toujours pour la lisibilité) est de
la préfixer avec "G" ou "G_" (G comme globale).

DOnc tu fais un truc du genre :

' Initialization Watch_dog
Dim G_Init as Boolean

...
' Global Init Watch_dog
If Not G_init Then
...

Simple question de style :-)

--
Jean-marc





Avatar
Jean-marc
Driss HANIB wrote:
Tu as raison Jean Marc,

J'ai toujours du mal à Préfixer comme conseillé..
C'est vrai que mes "essais' seraient un peu difficiles à relire par
d'autres. Je mets en tout cas toujours des nom "significatifs" pour
mes variables sausf classique I pour les itérations.



C'est une très bonne pratique !

J'essaie bien sur de mettre le plus de variables en local..
Par contre, je ne sais pas si c'est bien, : je crée pas mas de Types
Spécifiques à mes besoins. je manie de nombreux tableaux de ces types
et pour l'instant cela me convient..




La encore, c'est une excellente pratique. Ce sont les prémices
de la POO. De bons UDT, définissant des "objets métiers" et des
fonctions pour les manipuler : c'est parfait!

Quant aux collections , je "nage un peu" dans leur maniement ; j'en
aurais sans doute besoin dans mes classes mais bon..



Oui question de style. Perso, j'aime beaucoup les tableaux, c'est très
souple et très efficace.
Il est facile d'écrire des fonctions génériques (ou même une
petite classe) pour manipuler tout cela.

Petit à petit je pense optimiser mes progs



En fait, c'est une très bonne façon de faire; commencer à faire simple,
puis peu à peu améliorer, en définissant de meilleurs types, en
écrivant des fonctions plus génériques, commencer à se créer des modules
(.bas ou .cls d'ailleurs) implémentant des fonctions généralistes, etc.
Une fois qu'on y commence, on y prend gout et on ne peut plus jamais
écrire du "vilain code", ça devient un bonheur d'écrire joliment et
lisiblement :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
ludovic Taillez
Merci de votre aide,
mais cela ne suffit pas car lorsque je clique dans la list box j'effectue
aussi une listindex qui me renvoie au début de l'évenement c'est ça se
mordre la queue.
vraiment ça m'ennerve beaucoup.
Je m'explique pour le fonctionnement de ma listbox
En faite j'utilise une liste box pour choisir un élément ou plusieurs
éléments(ex: TR8)et en fonction de cet élément choisi j'ai des choix
incompatibles , il me faut donc enlever les choix incompatibles pour laisser
la personne effectuer la multi selection avec des éléments compatible
exemple:
TR8 TR8
TR9 TR9
PE1 TA2
PE6 PE6
TA2

Dans la 1ere liste je n'ai encore rien selectionner j'ai donc tous les
éléments dans la list box
Je clique sur TR8 par exemple
la list box est donc rafraichie en enlevant les choix incompatibles ici PE1.

Je suis en train de me poser la question si une listbox est réellement bien
pour ce type d'utilisation.
C'est pour mon boulot et je dois mettre ça en appli pour fin fev donc merci
de votre aide......

LT
"ludovic Taillez" a écrit dans le message de
news: 45b7b4d3$0$5052$
Bonsoir,
voici mon probléme:
lorsque je lance ma form(form1_load()) j'ai dans mon code
list1.listindex(0) et cela genere l'évenment list1_Click qui lui méme
exécute le code qu'il contient mais je ne souhaite justement pas qu'il
s'effectue.
Je voudrai l'exécuter uniquement lorsque je clique reellement sur la
listbox
J'espére mettre bien fait comprendre
Je vous remercie d'avance pour votre solution.....!!!!
LT



Avatar
Driss HANIB
Tout fait

j'essaie de plus en plus de faires des classes spécialisées et donc
réutilisables (impression, preview, pilotage word..)

Driss

"Jean-marc" a écrit dans le message
de news:45b8fb58$0$15370$
Driss HANIB wrote:
> Tu as raison Jean Marc,
>
> J'ai toujours du mal à Préfixer comme conseillé..
> C'est vrai que mes "essais' seraient un peu difficiles à relire par
> d'autres. Je mets en tout cas toujours des nom "significatifs" pour
> mes variables sausf classique I pour les itérations.

C'est une très bonne pratique !

> J'essaie bien sur de mettre le plus de variables en local..
> Par contre, je ne sais pas si c'est bien, : je crée pas mas de Types
> Spécifiques à mes besoins. je manie de nombreux tableaux de ces types
> et pour l'instant cela me convient..


La encore, c'est une excellente pratique. Ce sont les prémices
de la POO. De bons UDT, définissant des "objets métiers" et des
fonctions pour les manipuler : c'est parfait!

> Quant aux collections , je "nage un peu" dans leur maniement ; j'en
> aurais sans doute besoin dans mes classes mais bon..

Oui question de style. Perso, j'aime beaucoup les tableaux, c'est très
souple et très efficace.
Il est facile d'écrire des fonctions génériques (ou même une
petite classe) pour manipuler tout cela.

> Petit à petit je pense optimiser mes progs

En fait, c'est une très bonne façon de faire; commencer à faire simple,
puis peu à peu améliorer, en définissant de meilleurs types, en
écrivant des fonctions plus génériques, commencer à se créer des modules
(.bas ou .cls d'ailleurs) implémentant des fonctions généralistes, etc.
Une fois qu'on y commence, on y prend gout et on ne peut plus jamais
écrire du "vilain code", ça devient un bonheur d'écrire joliment et
lisiblement :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/