quasar06
Messages postés9Date d'inscriptionlundi 2 mars 2009StatutMembreDernière intervention 2 février 2013
-
27 janv. 2012 à 17:23
quasar06
Messages postés9Date d'inscriptionlundi 2 mars 2009StatutMembreDerniè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
quasar06
Messages postés9Date d'inscriptionlundi 2 mars 2009StatutMembreDerniè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 !
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
quasar06
Messages postés9Date d'inscriptionlundi 2 mars 2009StatutMembreDerniè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 !
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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
quasar06
Messages postés9Date d'inscriptionlundi 2 mars 2009StatutMembreDerniè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 ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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
quasar06
Messages postés9Date d'inscriptionlundi 2 mars 2009StatutMembreDerniè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