OVH Cloud OVH Cloud

Problème avec ListBox

7 réponses
Avatar
Guy Lafrenière
Bonjour Collègues,

Dans une fenêtre j'ai deux ListBox placé dans des PictureBox différents.
J'ai deux jeux de boutons de commande pour ajouter, renommer et supprimer
des éléments dans ces ListBox.

Je voudrais que le bon élément soit sélectionné après une opération d'ajout,
renommage ou suppression: le nouvel élément ajouté après un ajout, l'élément
qui vient d'être renommé après un renommage, l'élément suivant l'élément
supprimé après une suppression (ou le précédent si l'élément supprimé était
le dernier élément de la liste).

Je n'y arrive pas. J'ai essayé de toutes les manières de jouer avec les
propriétés ListIndex et NewIndex. Rien à faire! Après chacune des
opérations, c'est toujours le premier élément de la liste qui est
sélectionné. Pourtant mes opérations d'ajout, renommage et suppression ne
font pas appel à une routine qui recréerait les listes de novo. J'utilise
simplement les méthodes AddItem, RemoveItem,
MyListBox.List(intListIndex).Text = "NewValue".

Je joins ci-dessous mon code pour la commande Ajouter. Si je peux faire
fonctionner cette commande-là, ce sera sans doute la même solution pour les
autres.

Quelqu'un a-t-il une piste?
Merci à l'avance!

Guy Lafrenière


Voici mon code:

Private Sub cmdAjouterProfil_Click()
Dim strValeur As String
On Error GoTo Erreur
Set frmInputBox = New FInputBox
With frmInputBox
.InputFormCaption = "Ajouter un profil de sauvegarde"
.InputLabelCaption = "Entrez un nom descriptif pour le profil de
sauvegarde."
.ValueType = ibString
.Value = ""
.Show vbModal
strValeur = .Value
If Len(strValeur) > 0 Then
adorsProfils.AddNew
adorsProfils.Fields("NomProfil") = strValeur
adorsProfils.Update
lstProfils.AddItem strValeur
cmdRenommerProfil.Enabled = True
cmdSupprimerProfil.Enabled = True
End If
End With
Set frmInputBox = Nothing
Exit Sub
Erreur:
Set frmInputBox = Nothing
MsgBox Err.Description & vbCrLf & "Source: FMain:cmdAjouterProfilClick",
_
vbOKOnly + vbCritical,
"Erreur"
End Sub

7 réponses

Avatar
X
Bonsoir,

Compliqué ton truc :o)

Tu dis:
"Dans une fenêtre j'ai deux ListBox placé dans des PictureBox différents.
J'ai deux jeux de boutons de commande pour ajouter, renommer et supprimer
des éléments dans ces ListBox."

Déjà là, tu dis que tu mets tes listes dans des pictures, on pourrait même
pense que tes boutons sont dans la Picture ???

Cette propriété là devrait avoir de l'intérêt pour toi:

nomlist.TopIndex

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Guy Lafrenière" a écrit dans le message de news:

Bonjour Collègues,

Dans une fenêtre j'ai deux ListBox placé dans des PictureBox différents.
J'ai deux jeux de boutons de commande pour ajouter, renommer et supprimer
des éléments dans ces ListBox.

Je voudrais que le bon élément soit sélectionné après une opération
d'ajout, renommage ou suppression: le nouvel élément ajouté après un
ajout, l'élément qui vient d'être renommé après un renommage, l'élément
suivant l'élément supprimé après une suppression (ou le précédent si
l'élément supprimé était le dernier élément de la liste).

Je n'y arrive pas. J'ai essayé de toutes les manières de jouer avec les
propriétés ListIndex et NewIndex. Rien à faire! Après chacune des
opérations, c'est toujours le premier élément de la liste qui est
sélectionné. Pourtant mes opérations d'ajout, renommage et suppression ne
font pas appel à une routine qui recréerait les listes de novo. J'utilise
simplement les méthodes AddItem, RemoveItem,
MyListBox.List(intListIndex).Text = "NewValue".

Je joins ci-dessous mon code pour la commande Ajouter. Si je peux faire
fonctionner cette commande-là, ce sera sans doute la même solution pour
les autres.

Quelqu'un a-t-il une piste?
Merci à l'avance!

Guy Lafrenière


Voici mon code:

Private Sub cmdAjouterProfil_Click()
Dim strValeur As String
On Error GoTo Erreur
Set frmInputBox = New FInputBox
With frmInputBox
.InputFormCaption = "Ajouter un profil de sauvegarde"
.InputLabelCaption = "Entrez un nom descriptif pour le profil de
sauvegarde."
.ValueType = ibString
.Value = ""
.Show vbModal
strValeur = .Value
If Len(strValeur) > 0 Then
adorsProfils.AddNew
adorsProfils.Fields("NomProfil") = strValeur
adorsProfils.Update
lstProfils.AddItem strValeur
cmdRenommerProfil.Enabled = True
cmdSupprimerProfil.Enabled = True
End If
End With
Set frmInputBox = Nothing
Exit Sub
Erreur:
Set frmInputBox = Nothing
MsgBox Err.Description & vbCrLf & "Source:
FMain:cmdAjouterProfilClick", _
vbOKOnly + vbCritical,
"Erreur"
End Sub






Avatar
Fred
Dans : news:,
Guy Lafrenière disait :
Bonjour Collègues,



Bonjour,

Dans une fenêtre j'ai deux ListBox placé dans des PictureBox
différents. J'ai deux jeux de boutons de commande pour ajouter,
renommer et supprimer des éléments dans ces ListBox.

Je voudrais que le bon élément soit sélectionné après une opération
d'ajout, renommage ou suppression: le nouvel élément ajouté après un
ajout, l'élément qui vient d'être renommé après un renommage,
l'élément suivant l'élément supprimé après une suppression (ou le
précédent si l'élément supprimé était le dernier élément de la liste).

Je n'y arrive pas. J'ai essayé de toutes les manières de jouer avec
les propriétés ListIndex et NewIndex. Rien à faire! Après chacune des
opérations, c'est toujours le premier élément de la liste qui est
sélectionné. Pourtant mes opérations d'ajout, renommage et
suppression ne font pas appel à une routine qui recréerait les listes
de novo. J'utilise simplement les méthodes AddItem, RemoveItem,
MyListBox.List(intListIndex).Text = "NewValue".




Non, ce ne sera pas exactement le même procédé.
Pour la commande Ajouter, tu peux utiliser la propriété NewIndex, juste
après le Additem.
Elle te permettra de sélectionner le dernier ajout.

lstProfils.AddItem strValeur
lstProfils.ListIndex = lstProfils.NewItem

Pour le renommage. Je ne vois pas trop quel est le problème. Je suppose
que tu renommes l'élément sélectionné ?

lstProfils.List(lstProfils.ListIndex) = strValeur

Pour la sélection automatique de celui qui suit l'élément supprimé. Il
suffit de récupérer le ListIndex avant la suppression.

oldIndex = lstProfils.ListIndex
'ici, la suppression

If lstProfils.Count > 0 Then
If oldIndex < lstProfils.Count Then
lstProfils.ListIndex = oldIndex
Else
lstProfils.ListIndex = oldIndex - 1
End If
End If


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Fred
Dans : news:%,
Fred disait :

Je n'y arrive pas. J'ai essayé de toutes les manières de jouer avec
les propriétés ListIndex et NewIndex.





Oups, lu un peu trop rapidement !
Dans ce cas, je ne vois qu'un passage en trop dans une routine
d'initialisation. Il semblerait que la liste soit chargée à partir d'un
recordset.
Je mettrais des points d'arrêt à tous les endroits où la liste est
remplie pour voir ce qui se passe.
Ce peut-être dans un appel à l'évènement Activate ? (puisque je vois que
tu ouvres une autre fenêtre).



--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Guy Lafrenière
Bonjour X,

Je m'étonne de ton étonnement.

Ma form est un assistant avec des boutons Précédent et Suivant comme on en
voit souvent dans Windows. Chaque étape de l'assistant est placé dans son
propre PictureBox. On rend visible un PictureBox à la fois selon l'étape où
on est rendu. Rien de compliqué quand on l'a déjà fait une fois.

Je te remercie pour ta suggestion d'utiliser la propriété TopIndex mais ce
n'est d'aucune utilité. La propriété TopIndex sert à déterminer quel item
sera visible en haut du contrôle ListBox lorsque celui-ci n'est pas assez
haut pour afficher d'un coup tous les items. Mes ListBox sont suffisamment
hauts pour que tous les items à la fois soient visibles.

---------------------------------------------------------------------------------------------------------------------------

"X" a écrit dans le message de news:

Bonsoir,

Compliqué ton truc :o)

Tu dis:
"Dans une fenêtre j'ai deux ListBox placé dans des PictureBox différents.
J'ai deux jeux de boutons de commande pour ajouter, renommer et supprimer
des éléments dans ces ListBox."

Déjà là, tu dis que tu mets tes listes dans des pictures, on pourrait même
pense que tes boutons sont dans la Picture ???

Cette propriété là devrait avoir de l'intérêt pour toi:

nomlist.TopIndex

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Guy Lafrenière" a écrit dans le message de news:

Bonjour Collègues,

Dans une fenêtre j'ai deux ListBox placé dans des PictureBox différents.
J'ai deux jeux de boutons de commande pour ajouter, renommer et supprimer
des éléments dans ces ListBox.

Je voudrais que le bon élément soit sélectionné après une opération
d'ajout, renommage ou suppression: le nouvel élément ajouté après un
ajout, l'élément qui vient d'être renommé après un renommage, l'élément
suivant l'élément supprimé après une suppression (ou le précédent si
l'élément supprimé était le dernier élément de la liste).

Je n'y arrive pas. J'ai essayé de toutes les manières de jouer avec les
propriétés ListIndex et NewIndex. Rien à faire! Après chacune des
opérations, c'est toujours le premier élément de la liste qui est
sélectionné. Pourtant mes opérations d'ajout, renommage et suppression ne
font pas appel à une routine qui recréerait les listes de novo. J'utilise
simplement les méthodes AddItem, RemoveItem,
MyListBox.List(intListIndex).Text = "NewValue".

Je joins ci-dessous mon code pour la commande Ajouter. Si je peux faire
fonctionner cette commande-là, ce sera sans doute la même solution pour
les autres.

Quelqu'un a-t-il une piste?
Merci à l'avance!

Guy Lafrenière


Voici mon code:

Private Sub cmdAjouterProfil_Click()
Dim strValeur As String
On Error GoTo Erreur
Set frmInputBox = New FInputBox
With frmInputBox
.InputFormCaption = "Ajouter un profil de sauvegarde"
.InputLabelCaption = "Entrez un nom descriptif pour le profil de
sauvegarde."
.ValueType = ibString
.Value = ""
.Show vbModal
strValeur = .Value
If Len(strValeur) > 0 Then
adorsProfils.AddNew
adorsProfils.Fields("NomProfil") = strValeur
adorsProfils.Update
lstProfils.AddItem strValeur
cmdRenommerProfil.Enabled = True
cmdSupprimerProfil.Enabled = True
End If
End With
Set frmInputBox = Nothing
Exit Sub
Erreur:
Set frmInputBox = Nothing
MsgBox Err.Description & vbCrLf & "Source:
FMain:cmdAjouterProfilClick", _
vbOKOnly + vbCritical,
"Erreur"
End Sub










Avatar
Guy Lafrenière
Bonjour Fred,

Tu as résolu mes trois problèmes! Le problème venait effectivement de
l'événement Activate. J'avais oublié que cet événement s'exécutait à chaque
fois que je revenais de la boîte de dialogue demandant le nom de l'item
nouveau ou renommé.

Merci beaucoup!

Guy Lafrenière

----------------------------------------------------------------------------------------------------------------------------

Fred disait :

Dans ce cas, je ne vois qu'un passage en trop dans une routine
d'initialisation. Il semblerait que la liste soit chargée à partir d'un
recordset.
Je mettrais des points d'arrêt à tous les endroits où la liste est remplie
pour voir ce qui se passe.
Ce peut-être dans un appel à l'évènement Activate ? (puisque je vois que
tu ouvres une autre fenêtre).



Avatar
X
Bonsoir, je partais du fait que généralement on met des images dans une
Picture, et des listes et boutons dans une frame plutôt :o)

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Guy Lafrenière" a écrit dans le message de news:

Bonjour X,

Je m'étonne de ton étonnement.

Ma form est un assistant avec des boutons Précédent et Suivant comme on en
voit souvent dans Windows. Chaque étape de l'assistant est placé dans son
propre PictureBox. On rend visible un PictureBox à la fois selon l'étape
où on est rendu. Rien de compliqué quand on l'a déjà fait une fois.

Je te remercie pour ta suggestion d'utiliser la propriété TopIndex mais ce
n'est d'aucune utilité. La propriété TopIndex sert à déterminer quel item
sera visible en haut du contrôle ListBox lorsque celui-ci n'est pas assez
haut pour afficher d'un coup tous les items. Mes ListBox sont suffisamment
hauts pour que tous les items à la fois soient visibles.

---------------------------------------------------------------------------------------------------------------------------

"X" a écrit dans le message de news:

Bonsoir,

Compliqué ton truc :o)

Tu dis:
"Dans une fenêtre j'ai deux ListBox placé dans des PictureBox différents.
J'ai deux jeux de boutons de commande pour ajouter, renommer et supprimer
des éléments dans ces ListBox."

Déjà là, tu dis que tu mets tes listes dans des pictures, on pourrait
même pense que tes boutons sont dans la Picture ???

Cette propriété là devrait avoir de l'intérêt pour toi:

nomlist.TopIndex

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Guy Lafrenière" a écrit dans le message de
news:
Bonjour Collègues,

Dans une fenêtre j'ai deux ListBox placé dans des PictureBox différents.
J'ai deux jeux de boutons de commande pour ajouter, renommer et
supprimer des éléments dans ces ListBox.

Je voudrais que le bon élément soit sélectionné après une opération
d'ajout, renommage ou suppression: le nouvel élément ajouté après un
ajout, l'élément qui vient d'être renommé après un renommage, l'élément
suivant l'élément supprimé après une suppression (ou le précédent si
l'élément supprimé était le dernier élément de la liste).

Je n'y arrive pas. J'ai essayé de toutes les manières de jouer avec les
propriétés ListIndex et NewIndex. Rien à faire! Après chacune des
opérations, c'est toujours le premier élément de la liste qui est
sélectionné. Pourtant mes opérations d'ajout, renommage et suppression
ne font pas appel à une routine qui recréerait les listes de novo.
J'utilise simplement les méthodes AddItem, RemoveItem,
MyListBox.List(intListIndex).Text = "NewValue".

Je joins ci-dessous mon code pour la commande Ajouter. Si je peux faire
fonctionner cette commande-là, ce sera sans doute la même solution pour
les autres.

Quelqu'un a-t-il une piste?
Merci à l'avance!

Guy Lafrenière


Voici mon code:

Private Sub cmdAjouterProfil_Click()
Dim strValeur As String
On Error GoTo Erreur
Set frmInputBox = New FInputBox
With frmInputBox
.InputFormCaption = "Ajouter un profil de sauvegarde"
.InputLabelCaption = "Entrez un nom descriptif pour le profil de
sauvegarde."
.ValueType = ibString
.Value = ""
.Show vbModal
strValeur = .Value
If Len(strValeur) > 0 Then
adorsProfils.AddNew
adorsProfils.Fields("NomProfil") = strValeur
adorsProfils.Update
lstProfils.AddItem strValeur
cmdRenommerProfil.Enabled = True
cmdSupprimerProfil.Enabled = True
End If
End With
Set frmInputBox = Nothing
Exit Sub
Erreur:
Set frmInputBox = Nothing
MsgBox Err.Description & vbCrLf & "Source:
FMain:cmdAjouterProfilClick", _
vbOKOnly + vbCritical,
"Erreur"
End Sub














Avatar
Guy Lafrenière
Bonjour X,

Tu as raison en principe.

Ce n'est pas le premier assistant que je crée et j'ai pris l'habitude de
placer chaque page de mes assistants dans un PictureBox plutôt qu'un Frame.
Je ne me souviens plus pourquoi. Sans doute le résultat d'essais et erreurs
qui m'avaient amené à conclure que le PictureBox était plus approprié. J'ai
un vague souvenir que ça pourrait concerner le style de bordure qu'offre
l'un et l'autre (3D peut-être?).

Je devrais réétudié la situation. Je me sens un peu con chaque fois que je
constate que j'ai oublié pourquoi je fais quelque chose. Mais la
programmation reposant beaucoup sur le jeu des essais et erreurs, du moins
dans mon cas, il m'apparaît difficile de toujours se rappeler, des mois,
voire des années plus tard, pourquoi on fait les choses ainsi.

Il y a un principe qui dit "Si la machine fonctionne, n'y touche surtout
pas". C'est à la fois pratique, parce qu'on sauve du temps à ne pas toujours
refaire les mêmes essais et erreurs, mais c'est aussi dangereux parce que si
on a développé des mauvaises habitudes, on les perpétue et nos programmes en
souffrent.

Je te remercie de ta remarque.

Guy Lafrenière

----------------------------------------------------------------------------
------------------------------------------------
"X" écrit
Bonsoir, je partais du fait que généralement on met des images dans une
Picture, et des listes et boutons dans une frame plutôt :o)