Affichage items ListBox en mode OwnerDrawFixed (VB.Net et Visual Studio 2010)

Résolu
quasar06 Messages postés 9 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 février 2013 - 27 janv. 2012 à 17:23
quasar06 Messages postés 9 Date d'inscription lundi 2 mars 2009 Statut Membre 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.

9 réponses

quasar06 Messages postés 9 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 février 2013
29 janv. 2012 à 13:05
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.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 janv. 2012 à 17:53
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
0
quasar06 Messages postés 9 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 février 2013
27 janv. 2012 à 18:14
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 janv. 2012 à 18:20
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
0

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

Posez votre question
quasar06 Messages postés 9 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 février 2013
27 janv. 2012 à 18:32
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 ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 janv. 2012 à 18:44
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
0
quasar06 Messages postés 9 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 février 2013
27 janv. 2012 à 18:55
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 ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 janv. 2012 à 19:04
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
0
quasar06 Messages postés 9 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 février 2013
27 janv. 2012 à 19:19
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.
0
Rejoignez-nous