Probleme de liaison entre une list box et un text box

Le
john.ambou
Bonjour,


Je possede une petite application comprenant 4 text box et 1 list.
J'utilise l'evenement click de la list pour remplir mes 47 text box
ainsi lorque mon projet s'ouvre, je clique sur 4 ligne different de la
list box et par l'intermediaire de "listindex" je remplit les 4 text
box avec leur numero de ligne.

J'ai ensuite crer un evenement click avec les text box qui permet
d'effacer le contenu de la case ainsi que de dselectionner la ligne
de la list qui lui correspond ceci fonctionne bien mais des que je
clique sur 2 text box d'affil, j'ai la premiere text box ou j'ai
cliqu qui possede l'index du dernier clique que j'ai fais sur la list
box.
un exemple :

je remplit tous d'abord en cliquant sur la list j'obtient ceci
text1 = 1
text2 = 2
text3 = 3
text4 = 4

je clique ensuite sur text3, j'obtient
text1 = 1
text2 = 2
text3 =
text4 = 4

je clique ensuite sur text1, j'obtient
text1 =
text2 = 2
text3 = 4
text4 = 4

comme vous pouvez le voir, il y a un probleme le text3 se remplit tous
seule!

Voyez vous une solution ou une explication a ceci ?
Je vous remercie
Johnson

  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Patrice Henrio
Le #15453411
Peux-tu envoyer aussi ton code pour vérifier ?

En particulier voir s'il n'y a pas un évènement "change" quelque part ?

Pour ma part cela fonctionne avec le bémol suivant : la ligne
List1.ListIndex=0 revient à faire un click sur la list box et à sélectionner
le premier item ce qui semble logique.

Private Sub List1_Click()
Select Case List1.ListIndex
Case 0
Text1 = 1
Case 1
Text2 = 2
Case 2
Text3 = 3
Case 3
Text4 = 4
End Select
End Sub


Private Sub Text1_Click()
Text1 = ""
List1.ListIndex = 0

End Sub



Private Sub Text2_Click()
Text2 = ""
List1.ListIndex = 0

End Sub



Private Sub Text3_Click()
Text3 = ""
List1.ListIndex = 0

End Sub


Private Sub Text4_Click()
Text4 = ""
List1.ListIndex = 0

End Sub


Bonjour,


Je possede une petite application comprenant 4 text box et 1 list.
J'utilise l'evenement click de la list pour remplir mes 47 text box
ainsi lorque mon projet s'ouvre, je clique sur 4 ligne different de la
list box et par l'intermediaire de "listindex" je remplit les 4 text
box avec leur numero de ligne.

J'ai ensuite créer un evenement click avec les text box qui permet
d'effacer le contenu de la case ainsi que de déselectionner la ligne
de la list qui lui correspond ceci fonctionne bien mais des que je
clique sur 2 text box d'affilé, j'ai la premiere text box ou j'ai
cliqué qui possede l'index du dernier clique que j'ai fais sur la list
box.
un exemple :

je remplit tous d'abord en cliquant sur la list j'obtient ceci
text1 = 1
text2 = 2
text3 = 3
text4 = 4

je clique ensuite sur text3, j'obtient
text1 = 1
text2 = 2
text3 text4 = 4

je clique ensuite sur text1, j'obtient
text1 text2 = 2
text3 = 4
text4 = 4

comme vous pouvez le voir, il y a un probleme le text3 se remplit tous
seule!

Voyez vous une solution ou une explication a ceci ?
Je vous remercie
Johnson
john.ambou
Le #15453391
Si dans mon evenement text1_clikck je fais
list1.selected(list1.listindex) = false

Est ce que ca va appelez l'événement list1.click?
Patrice Henrio
Le #15453361
Tout à fait, cela fonctionne

Voici le code qui montre d'ailleurs qu'il serait peut-être bon d'utiliser un
groupe de TextBox (des TextBox indexés)

Option Explicit

Private Sub List1_Click()
Select Case List1.ListIndex
Case 0
Text1 = 1
Case 1
Text2 = 2
Case 2
Text3 = 3
Case 3
Text4 = 4
End Select
End Sub


Private Sub Text1_Click()
Text1 = ""
List1.Selected(0) = False

End Sub



Private Sub Text2_Click()
Text2 = ""
List1.Selected(1) = False

End Sub



Private Sub Text3_Click()
Text3 = ""
List1.Selected(2) = False

End Sub


Private Sub Text4_Click()
Text4 = ""
List1.Selected(3) = False

End Sub



Si dans mon evenement text1_clikck je fais
list1.selected(list1.listindex) = false

Est ce que ca va appelez l'événement list1.click?
john.ambou
Le #15453341
Prog de l'un de mes boutons text


If Text2.Text = "" Then GoTo saut
If Text2.Text = 1 Then
List1.Selected(0) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 2 Then
List1.Selected(1) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 3 Then
List1.Selected(2) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 4 Then
List1.Selected(3) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 5 Then
List1.Selected(4) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 6 Then
List1.Selected(5) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 7 Then
List1.Selected(6) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 8 Then
List1.Selected(7) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 9 Then
List1.Selected(8) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 10 Then
List1.Selected(9) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 11 Then
List1.Selected(10) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 12 Then
List1.Selected(11) = False
Text2.Text = ""
End If

saut: Text1.BackColor = &HFFFFFF
Text2.BackColor = &HFF&
Text3.BackColor = &HFFFFFF
Text4.BackColor = &HFFFFFF
Text5.BackColor = &HFFFFFF
Text6.BackColor = &HFFFFFF
Text7.BackColor = &HFFFFFF

End Sub


But de ce bouton est de pouvoir effacer son contenu ainsi que de
décocher dans la listbox la selection par rapport a son numero. Enfin
je change la couleur de mon text box en rouge.


Prog de ma list
Tous d'abord verfication si on ne clique pas sur une selection deja
faite afin, on efface ainsi si un text box possede ce nombre (on fai
ceci pour mes 7 text box, mais j'ai laissé uniquement pour un
bouton)
Sinon lorsque l'on clique on met l'index dans la case concerné
puis ensuite verification des text suivant pour mettre le focus dessus.

Private Sub List1_Click()
Dim Compteur_film As Integer
Dim Compteur_film_total As Integer
Dim i As Integer

If List1.Selected(List1.ListIndex) = False Then
If Text1.Text = "" Then GoTo saut
If Text1.Text = List1.ListIndex + 1 Then
Text1.Text = ""
Text1.BackColor = &HFF&
Text2.BackColor = &HFFFFFF
Text3.BackColor = &HFFFFFF
Text4.BackColor = &HFFFFFF
Text5.BackColor = &HFFFFFF
Text6.BackColor = &HFFFFFF
Text7.BackColor = &HFFFFFF
Exit Sub
End If





saut: If Text1.BackColor = &HFF& Then
Text1.Text = List1.ListIndex + 1
Text1.BackColor = &HFFFFFF

If Compteur_film >= 2 Then

If Text2.Text = "" And Text2.Enabled = True Then
Text1.CausesValidation = False
Text2.SetFocus
Text2.BackColor = &HFF&
Exit Sub
End If

If Text3.Text = "" And Text3.Enabled = True Then
Text1.CausesValidation = False
Text3.SetFocus
Text3.BackColor = &HFF&
Exit Sub
End If

If Text4.Text = "" And Text4.Enabled = True Then
Text1.CausesValidation = False
Text4.SetFocus
Text4.BackColor = &HFF&
Exit Sub
End If

If Text5.Text = "" And Text5.Enabled = True Then
Text1.CausesValidation = False
Text5.SetFocus
Text5.BackColor = &HFF&
Exit Sub
End If

If Text6.Text = "" And Text6.Enabled = True Then
Text1.CausesValidation = False
Text6.SetFocus
Text6.BackColor = &HFF&
Exit Sub
End If

If Text7.Text = "" And Text7.Enabled = True Then
Text1.CausesValidation = False
Text7.SetFocus
Text7.BackColor = &HFF&
Exit Sub
End If
End If
Exit Sub
End If
End sub

La ou se trouve mon programme

Supposion que jai seulement 3 text box je clique donc sur 3 choix sur
ma list j'ai ainsi d'après ou j'ai cliqué 3 numero dans mes
text.

Ensuite lorsque je clique sur 1 text le chiffre s'efface bien.
Je clique ensuite sur un autre nombre et la il y a un probleme car la
premiere case ou j'avais cliqué il y a l'index du dernier clique
que j'ai effectué sur la list

Le meme probleme se produit si j'essaye dinserer un nombre dans la
premiere case, en effet j'ai tapé par exmple 10 et lorsque je clique
sur une autre text box jai le 10 qui est remplacé.

J'espere vous avoir eclairé et que ceci sera assez clair
Je vous remercie de votre aide
Johnson
john.ambou
Le #15453331
existe t'il un moyen de faire list1.selected(0) sans avoir a rentrer
dans la fonction list1_click ?

Merci
Patrice Henrio
Le #15453321
Je vois d'abord de nombreuses erreurs de programmation, ou plutôt de
conception. Si tu en es d'accord on peut essayer d'y remédier



<début de ton prog>
Prog de l'un de mes boutons text
If Text2.Text = "" Then GoTo saut
If Text2.Text = 1 Then
List1.Selected(0) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 2 Then
List1.Selected(1) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 3 Then
List1.Selected(2) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 4 Then
List1.Selected(3) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 5 Then
List1.Selected(4) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 6 Then
List1.Selected(5) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 7 Then
List1.Selected(6) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 8 Then
List1.Selected(7) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 9 Then
List1.Selected(8) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 10 Then
List1.Selected(9) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 11 Then
List1.Selected(10) = False
Text2.Text = ""
GoTo saut
End If
If Text2.Text = 12 Then
List1.Selected(11) = False
Text2.Text = ""
End If

saut: Text1.BackColor = &HFFFFFF
Text2.BackColor = &HFF&
Text3.BackColor = &HFFFFFF
Text4.BackColor = &HFFFFFF
Text5.BackColor = &HFFFFFF
Text6.BackColor = &HFFFFFF
Text7.BackColor = &HFFFFFF

End Sub

<fin de ton prog>

Par exemple ton programme serait plus compact et plus lisible ainsi

<début de ma proposition>
'Il faut que Text2 soit un nombre
'On peut utiliser directement Text2 car la propriété par défaut est "text"

If IsNumeric(Text2) then
'La valeur de text2 doit être entre 1 et 12
If (Text2>0) and (Text2<13) then
List1.Selected(Text2-1)úlse
End If
End If
Text1.BackColor = &HFFFFFF
Text2.BackColor = &HFF&
Text3.BackColor = &HFFFFFF
Text4.BackColor = &HFFFFFF
Text5.BackColor = &HFFFFFF
Text6.BackColor = &HFFFFFF
Text7.BackColor = &HFFFFFF

<fin de ma proposition>



But de ce bouton est de pouvoir effacer son contenu ainsi que de
décocher dans la listbox la selection par rapport a son numero. Enfin
je change la couleur de mon text box en rouge.



Attention un bouton n'a pas à priori de contenu,
l'équivalent de la propriété "text" d'un text box est "caption" pour le
controle Button

Prog de ma list
Tous d'abord verfication si on ne clique pas sur une selection deja
faite afin, on efface ainsi si un text box possede ce nombre (on fai
ceci pour mes 7 text box, mais j'ai laissé uniquement pour un
bouton)
Sinon lorsque l'on clique on met l'index dans la case concerné
puis ensuite verification des text suivant pour mettre le focus dessus.



<début de ton programme>
Private Sub List1_Click()
Dim Compteur_film As Integer
Dim Compteur_film_total As Integer
Dim i As Integer

If List1.Selected(List1.ListIndex) = False Then
If Text1.Text = "" Then GoTo saut
If Text1.Text = List1.ListIndex + 1 Then
Text1.Text = ""
Text1.BackColor = &HFF&
Text2.BackColor = &HFFFFFF
Text3.BackColor = &HFFFFFF
Text4.BackColor = &HFFFFFF
Text5.BackColor = &HFFFFFF
Text6.BackColor = &HFFFFFF
Text7.BackColor = &HFFFFFF
Exit Sub
End If
saut: If Text1.BackColor = &HFF& Then
Text1.Text = List1.ListIndex + 1
Text1.BackColor = &HFFFFFF

If Compteur_film >= 2 Then

If Text2.Text = "" And Text2.Enabled = True Then
Text1.CausesValidation = False
Text2.SetFocus
Text2.BackColor = &HFF&
Exit Sub
End If

If Text3.Text = "" And Text3.Enabled = True Then
Text1.CausesValidation = False
Text3.SetFocus
Text3.BackColor = &HFF&
Exit Sub
End If

If Text4.Text = "" And Text4.Enabled = True Then
Text1.CausesValidation = False
Text4.SetFocus
Text4.BackColor = &HFF&
Exit Sub
End If

If Text5.Text = "" And Text5.Enabled = True Then
Text1.CausesValidation = False
Text5.SetFocus
Text5.BackColor = &HFF&
Exit Sub
End If

If Text6.Text = "" And Text6.Enabled = True Then
Text1.CausesValidation = False
Text6.SetFocus
Text6.BackColor = &HFF&
Exit Sub
End If

If Text7.Text = "" And Text7.Enabled = True Then
Text1.CausesValidation = False
Text7.SetFocus
Text7.BackColor = &HFF&
Exit Sub
End If
End If
Exit Sub
End If
End sub
<fin de ton programme>

Tout d'abord mauvaise utilisation d'un booléen

If List1.Selected(List1.ListIndex) = False Then
doit s'écrire
If Not List1.Selected(List1.ListIndex) Then

Ensuite les variables Compteur_film_total et i ne sont pas utilisées.
La variable Compteur_film n'est pas affectée donc le test Compteur_film >= 2
renvoie toujours faux et toute la partie suivant le then est ignorée.

Il me semble qu'ici un groupe de controle TextBox serait préférable ce qui
te permettrait d'écrire Text(1) au lieu de Text1 et Text(2) au lieu de
Text2, plus généralement Text(List1.ListIndex+1) au lieu de tester ce
dernier.

Ce qui nous donne pour la partie la plus longue quelque chose du genre (en
utilisant la variable i, et en traitant les booléens pour ce qu'ils sont)

For i=1 to Text.count
If Text(i).Text = "" And Text(i).Enabled Then
Text1.CausesValidation = False
Text(i).SetFocus
Text(i).BackColor = &HFF&
Exit Sub
End If
Next i

Mais je le répète, pour l'instant et sans autre information, cette partie
n'est jamais exécutée.

Tu utilises beaucoup trop de exit sub qui ne devraient être qu'exceptionnels

Voici ce que devient le programme épuré avec un groupe de textbox

Option Explicit

Private Sub List1_Click()
Text(List1.ListIndex).Text = List1.ListIndex + 1
End Sub

Private Sub Text_Click(Index As Integer)
Text(Index) = ""
List1.Selected(Index) = False
End Sub


Enfin pour la question précise, rien dans ce qui est écrit ici ne permet
d'écrire quelque chose dans un textbox.

Bon courage et n'hésite pas à demander des explications si ce que je
t'envoie n'est pas assez clair.
john.ambou
Le #15453311
Merci beaucoup de votre aide !

Je suis débutant en VB et je maitrise pas trop cette programmation.
J'ai assimiler tout vos conseils qui m'ont beacoup aider!

Et pour le probleme que j'avais avec l'appel de la fonction click, j'ai
utiliser dans ma fonction text_click un boolean que je met a true puis
dans ma fonction list1_click au début je fais un test avec le boolean
si il est true je fais un exit sub. Ainsi, je n'est pas a acceder a la
fonction!

Merci
Johnson
Poster une réponse
Anonyme