ListBox et scrollbar

ptitelili059 Messages postés 43 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 9 juin 2010 - 8 juin 2010 à 15:43
ptitelili059 Messages postés 43 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 9 juin 2010 - 9 juin 2010 à 10:10
Bonjour

Je suis en train de dessiner une listbox avec la méthode DrawItem pour changer les couleurs en fonction d'un critère. Cela fonctionne très bien. Cependant, quand j'utilise la scrollbar verticale, le texte ne s'affiche plus correctement mais en plusieurs fois et donc le texte paraît trouble. Je ne sais pas comment résoudre ce problème.

A noter que si j'utilise uniquement les flèches du haut et du bas de la scrollbar pour faire défiler, le texte s'afficher parfaitement bien.

Avez-vous une idée de comment faire ? Merci

6 réponses

lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
8 juin 2010 à 16:17
Bonjour,

A mon avis pour avoir une réponse précise, il faudrait communiquer le code pour voir ce qui pourrait bloquer.

A tout hasard, as-tu essayé de mettre un application.doevents() dans ton programme ?

L'expérience, c'est une connerie par jour, mais jamais la même..
0
ptitelili059 Messages postés 43 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 9 juin 2010
8 juin 2010 à 16:25
    Private Sub ListBoxTypeVoie_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBoxTypeVoie.DrawItem
        If e.Index <> -1 Then
            System.Threading.Thread.Sleep(12)
            Dim lb As ListBox
            lb = sender
            Dim typeVoie As New TypeVoie
            typeVoie = lb.Items(e.Index)
            Dim myBrush As Brush
            e.DrawBackground()
            If typeVoie.archive = True Then
                myBrush = Brushes.Red
            Else
                myBrush = Brushes.Black
            End If
            e.Graphics.DrawString(typeVoie.libelleTypeVoie, e.Font, myBrush, e.Bounds.X, e.Bounds.Y)
        End If
    End Sub
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
8 juin 2010 à 22:03
Salut,

Tu te casse la tête pour pas grand chose, utilise un listview, tu peux éditer les couleurs de tes éléments de liste.


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
8 juin 2010 à 22:09
Sinon tu peux essayer d'effacer le texte précédant en remplissant la zone de dessin d'un rcetangle de la couleur de fond de ton listbox, mais je n'ai pas testé :

Private Sub ListBoxTypeVoie_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBoxTypeVoie.DrawItem
        If e.Index <> -1 Then
            System.Threading.Thread.Sleep(12)
            Dim lb As ListBox
            lb = sender
            Dim typeVoie As New TypeVoie
            typeVoie = lb.Items(e.Index)
            Dim myBrush As Brush
            e.DrawBackground()
            If typeVoie.archive = True Then
                myBrush = Brushes.Red
            Else
                myBrush = Brushes.Black
            End If
            e.Graphics.FillRectangle(New Pen(ListBoxTypeVoie.ForeColor).Brush, 0, 0, e.Bounds.X, e.Bounds.Y)
            e.Graphics.DrawString(typeVoie.libelleTypeVoie, e.Font, myBrush, e.Bounds.X, e.Bounds.Y)
        End If
    End Sub



Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0

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

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 juin 2010 à 10:06
Bonjour,
Ne cherchez plus, j'ai moi-même employé la méthode DrawItem dans une de mes sources:
http://www.vbfrance.com/codes/COMPARER_2FICHIERS_TEXTE_50765.aspx

j'ai ajouté:
System.Threading.Thread.Sleep(12)
dans mon code et le problème vient de là il suffit de supprimer cette ligne si vous le pouvez et tout rentrera dans l'ordre.
@+
0
ptitelili059 Messages postés 43 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 9 juin 2010
9 juin 2010 à 10:10
Merci pour ta réponse mais quand j'enlève la ligne
System.Threading.Thread.Sleep(12)
c'est encore pire !!
0
Rejoignez-nous