Affichage items ListBox en mode OwnerDrawFixed (VB.Net et Visual Studio 2010) [Résolu]

Messages postés
9
Date d'inscription
lundi 2 mars 2009
Dernière intervention
2 février 2013
- - Dernière réponse : quasar06
Messages postés
9
Date d'inscription
lundi 2 mars 2009
Dernière intervention
2 février 2013
- 29 janv. 2012 à 13:05
Bonjour,

Après de nombreuses recherches infructueuses sur le Net, je me permets de vous soumettre mon problème.

Voulant "personnaliser" une ListBox j'ai utilisé le code suivant (honteusement "pompé") en VB.Net avec Visual Studio 2010 :

Dim clrSelectedText As Color = SystemColors.WindowText 'Our color for selected text
Dim clrHighlight As Color = Color.Red 'Our background for selected items

Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
If e.State = DrawItemState.Selected Then
'This item is selected
'e.DrawBackground()
e.Graphics.FillRectangle(New SolidBrush(clrHighlight), e.Bounds) 'Fill the item's rectangle with our highlight
e.Graphics.DrawString(ListBox1.Items.Item(e.Index), e.Font, New SolidBrush(clrSelectedText), e.Bounds) 'Draw the text for the item
ElseIf e.State = DrawItemState.None Then
'This item has no state
e.DrawBackground() 'Draw our regular background
e.Graphics.DrawString(ListBox1.Items.Item(e.Index), e.Font, Brushes.Black, e.Bounds) 'Draw the item text in its regular color
End If
'Draws a focus rectangle around the item if it has focus
e.DrawFocusRectangle()
End Sub

Ce code fonctionne à merveille si ma ListBox est SEULE sur une Form, mais dès que je place un autre Control (par ex Bouton ou Label) ma ListBox n'affiche plus rien (bien qu'elle contienne des Items) !!!

J'en perd mon latin...et mes derniers neurones intacts

Avez-vous une idée du problème ?

D'avance merci.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
9
Date d'inscription
lundi 2 mars 2009
Dernière intervention
2 février 2013
3
Merci
Bonjour,

J'AI TROUVÉ !

Mon code cité précédemment n'était en fait pas parfait !
Il ne fallait pas faire le test avec un simple signe égal mais il fallait utiliser un "and" car on doit comparer des combinaisons de valeurs.
Il fallait écrire : If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then...
et non : If e.State = DrawItemState.Selected Then...
Avec le simple signe égal cela ne fonctionnait que si la ListBox était seule sur la Form !

Merci.
Bye.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de quasar06
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,

as-tu eu le réflexe de donner le focus à ta listbox avant de faire cela ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
9
Date d'inscription
lundi 2 mars 2009
Dernière intervention
2 février 2013
0
Merci
Bonjour ucfoutu,

Merci pour ta réponse.
Oui, j'avais donné le focus par ListBox1.focus().
J'ai pensé aussi à une histoire de TabIndex, mais ça ne donne rien non plus.

Une autre idée ?

Merci.
Commenter la réponse de quasar06
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Non. Pas d'autre idée.
Depuis quoi appelles-tu ce code ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
9
Date d'inscription
lundi 2 mars 2009
Dernière intervention
2 février 2013
0
Merci
J'ai simplement posé une ListBox sur une Form vierge et écrit le code indiqué plus haut.
Tout va bien si la ListBox est seule sur la Form, mais si je place par ex un Bouton sur cette même Form (même sans événement)la ListBox s'affiche bien mais sans ses Items !

Bizarre, non !?

Le pb peut-il venir de Visual Studio ?
Commenter la réponse de quasar06
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bizarre, en effet.
As-tu vérifié que cet évènement se déclenche bien ?
En y mettant par exemple une messagebox affichant "oui" ?
et dans quel évènement as-tu mis ListBox1.focus() ?

Et si, enfin, tu cherchais à rappeler/forcer cet évènement lui-même à l'activation de ton form (et après lui avoir donné le focus) ?
Essaye, pour voir ce qui se passerait ainsi.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
9
Date d'inscription
lundi 2 mars 2009
Dernière intervention
2 février 2013
0
Merci
J'avais pensé à mettre des MsgBox, elles s'affichent, donc le code s'exécute bien...
Je ne voudrais pas abuser de ta patience, mais accepterais-tu de tester mon code ? (j'ai un .sln avec les 2 cas et on voit bien le pb)
Je pourrais peut-être te l'envoyer par MP ?
Commenter la réponse de quasar06
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Non.
Il y a une bonne raison à cela : je ne peux tester, n'étant pas VB.Nettiste.
Toutes mes réponses sur VB.Net se font "en aveugle", en n'utilisant que l'analyse du code montré.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
9
Date d'inscription
lundi 2 mars 2009
Dernière intervention
2 février 2013
0
Merci
Le code "en lui-même" est bon puisqu'il s'exécute bien sur une Form vierge de tout Bouton ou autre, mais pas sur une Form qui contient un Bouton.
C'est peut-être une affaire de Focus, de TabIndex, ...
Je ne vais pas t'ennuyer d'avantage et je te remercie pour tes réponses.

La nuit porte conseil et demain est un autre jour...et peut-être qu'un bon samaritain se manifestera...avant que je ne devienne gaga

Encore merci et bonne soirée ucfoutu.
Au plaisir.
Commenter la réponse de quasar06

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.