Colorer un élément d'une listbox

Signaler
-
 Sannana -
Bonjour,

j'ai deux listbox, la première listnumber qui va afficher des nombres aléatoires à trier, et la deuxième surlaquelle ils le sont et qui s'affiche qd l'utilisateur clique sur le bouton corriger cependant je veux en comparant les deux listbox ligne par ligne colorer les éléments qui ne sont pas pareils donc définir les erreurs de l'utilisateur. J e sais qu'il existe une fonction drawitem mais je ne sais pas comment la programmer.
merci pour votre aide

11 réponses

Messages postés
14757
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
151
Bonjour,

As-tu vraiment cherché ?
http://www.vbfrance.com/codes/LISTBOX-AVEC-TEXT-COULEUR-FACILEMENT-MODIFIABLE_21062.aspx

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site

Bonjour,

Voici un exemple commenté. Tu noteras le changement de la propriété DrawMode de ListBox2 :
Option Strict On
Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'indique à listbox2 de dessiner ses items par l'événement DrawItem
        ListBox2.DrawMode = DrawMode.OwnerDrawFixed
        'ajout des éléments
        ListBox1.Items.AddRange({"banane", "orange", "citron"})
        ListBox2.Items.AddRange({"citron", "orange", "banane"})
    End Sub

    Private Sub ListBox2_DrawItem(sender As Object, e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox2.DrawItem
        'si les textes sont différents...
        If CType(ListBox1.Items(e.Index), String) <> CType(ListBox2.Items(e.Index), String) Then
            'affichage d'un rectangle rouge
            e.Graphics.FillRectangle(Brushes.Red, e.Bounds)
        Else
            'affichage rectangle vert
            e.Graphics.FillRectangle(Brushes.GreenYellow, e.Bounds)
        End If
        'affichage du texte
        e.Graphics.DrawString(ListBox2.Items(e.Index).ToString, e.Font, Brushes.Black, New PointF(e.Bounds.Left, e.Bounds.Top))
    End Sub
End Class
Merci pour ta réponse mais voici mon code initial :

Private Sub corrigernmd3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles corrigernmd3.Click

listcorriger.Sorted = True
listcorriger.Show()
Dim j As Integer
j = 0
For a As Integer = 0 To listnumber.Items.Count - 1
Dim nb1 = listnumber.Items(a)
Dim nb2 = listcorriger.Items(a)
If nb1 <> nb2 Then
j = j + 1
End If
Next
resultat.Text = 10 - j
End Sub


Dsl j'ai découvert vb il y a deux semaines et je ne le maitrise pas vraiment. Le but est d'incrémenter la couleur si nb1<> nb2 en rouge sinon en vert.

merci

Tu dois affecter la propriété DrawMode de ta listcorriger à OwnerDrawFixed
listcorriger.DrawMode = DrawMode.OwnerDrawFixed

Puis implémenter son événement DrawItem de la manière dont je te l'ai montré dans l'exemple.
merci ça a marché mais
- la liste est verte dès le chargement de la feuille
- en cliquant sur corriger, rien ne se passe sauf si on clique en plus sur la liste en question
- le bouton essayer a nouveau n'est pas en fond blanc mais rouge et vert, il fournit la solution avant même de trier la liste

Merci infiniment pour ton aide
comment faire appel a drawitem que si on clique sur le bouton corriger !! ainsi essayer de nouveau remarchera et le problème de chargement de la page aussi.

Tu dois jouer sur la propriété DrawMode au moment opportun.
Tu peux la changer par code à tout moment.
Sur Normal ta liste s'affichera normalement et sur OwnerDrawFixed elle se dessinera selon son événement DrawItem

Après avoir changé la propriété DrawMode, tu peux aussi faire un listcorriger.refresh() pour forcer le dessin.
j'ai fixé le draw mode en normal dans le chargement et essayer a nouveau et du coup ça ne marche plus pr le bouton corriger. est ce que je peux appeler la fonction dans le code du bouton corriger c tt !!

est ce que je peux appeler la fonction dans le code du bouton corriger c tt

Dans le code de ton bouton corriger, c'est là que tu dois changer la propriété en OwnerDrawFixed et rafraichir ta liste (2 lignes de code donc).
Merci beaucoup j'y suis enfin arrivé :) c'est vraiment génial :)