IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

ListBox : couleurs et selection d'indice


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Points : 14
    Points
    14
    Par défaut ListBox : couleurs et selection d'indice
    Bonjour à tous,

    Dans ma form j'ai une liste box avec 5 items.

    J'aimerais que l'utilisateur selectionne un des 5 items et clique sur "suivant" afin de voir si l'item sur lequel il a cliqué est la bonne réponse. (C'est un Quiz, avec la réponse qui est un des 5 items de la listbox).
    Pour ca, pas de soucis, cependant j'aimerais que :
    - si il s'est trompé, sa réponse (dans la listbox) se surligne en rouge, et la bonne réponse en vert.
    - si il a juste, sa réponse se surligne en vert (dans la listbox)

    Pourriez-vous m'aider à faire ceci ? Je ne trouve pas vraiment de propriété adaptée.
    On m'a vaguement parlé de drawmode mais je ne suis pas arrivé à faire marché ca correctement.


    Merci d'avance

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Je crois que tu as intérêts à utiliser une ListView plutôt qu'une ListBox.

    Avec une ListView LVDonnees, que je peux remplir quelque part dans le code avec LVDonnees.Items.Add(Ligne), je peux colorier comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       Private Sub LVDonnees_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LVDonnees.SelectedIndexChanged
     
            'If Condition ... Then
            LVDonnees.FocusedItem.BackColor = Color.Yellow
     
            'End If
     
        End Sub
    Pour de bons résultats, mieux vaut tout de même chercher de la documentation sur la ListView, elle un peu plus difficile à utiliser que la ListBox ...

    J'espère te donner une bonne piste ...

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Bonjour
    Pourriez-vous m'aider à faire ceci ? Je ne trouve pas vraiment de propriété adaptée.
    Avec quel "louche" as-tu cherché ? probablement une louche-passoire qui n'est pas efficace...
    L'event DrawItem permet de faire beaucoup de chose ,si on l’équipe d'un Class ItemExcentrique adapté à ton questionnaire Quiz (il est vraiment "excentrique" au point qu'on peut lui rajouter une prop Image ou une prop Font etc...)!!!
    son code .vb exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Public Class ItemExcentrique
        Public Property Id As String
        Public Property Etat As Boolean
        Public Property Color As Color
        Public Sub New()
            Id = String.Empty
            Etat = False
            Color = Color.Transparent
     
        End Sub
        Public Sub New(pid As String, petat As Boolean)
            Me.New()
            Id = pid
            Etat = petat
     
        End Sub
    End Class
    le code .vb du Form user doté de 3 labels et d'un ListBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    Public Class FormQuiz
        Private Question As String = String.Empty 'question courante
        Private reponseUser As Boolean = True 'reponse user
        Private ListReponses As List(Of ItemExcentrique) 'les reponses "justes"
     
        Private nbPoints As Integer
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            ListBox1.DrawMode = DrawMode.OwnerDrawFixed
        End Sub
        Private Sub FormQuiz_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Question = "Quel langage informatique n'existe pas?"
            lblQuestion.Text = Question
            lblQuestion.ForeColor = Color.Magenta
            lblQuestion.Font = New Font("times new roman", 14.0F)
     
     
            ListReponses = New List(Of ItemExcentrique) From {
               New ItemExcentrique("Python", False),
               New ItemExcentrique("Java", False),
               New ItemExcentrique("A", True),
               New ItemExcentrique("Pascal", False)}
     
     
     
            ListBox1.DrawMode = DrawMode.OwnerDrawFixed
            ListBox1.DataSource = ListReponses
     
        End Sub
        Private Sub ListBox1_DrawItem(sender As Object, e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
     
     
            e.DrawBackground() 'arriere plan du listbox
            Dim item As ItemExcentrique = CType(ListBox1.Items(e.Index), ItemExcentrique)
            Dim fnt As Font = e.Font
     
            ' Selectionne un brush approprie suivant valeur de e.Sate(e.State est une combinaison de bit-flag des  valeurs d'un Enum)
            ' &  
            If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
                ' item est selectionné 
                e.Graphics.FillRectangle(Brushes.Yellow, e.Bounds) 'arriere plan de l'item selectionné            If item.Etat = reponseUser Then
                If item.Etat = reponseUser Then 'reponse user coincidente
                    Using greenBrush As New SolidBrush(Color.Green)
                        ' Perform the painting.
                        e.Graphics.DrawString(item.Id, fnt, greenBrush, e.Bounds.X, e.Bounds.Y)
                        lblReponse.Text = "Vrai"
                        nbPoints = 5
                        lblPoints.Text = nbPoints.ToString()
                    End Using
                Else
                    'reponse user non coincidente
                    Using redBrush As New SolidBrush(Color.Red)
                        ' Perform the painting.
                        e.Graphics.DrawString(item.Id, fnt, redBrush, e.Bounds.X, e.Bounds.Y)
                        lblReponse.Text = "Faux"
                        nbPoints = 0
                        lblPoints.Text = nbPoints.ToString()
                    End Using
                End If
     
            Else
                ' item est non selectionné 
                Using defaultBrush As New SolidBrush(e.ForeColor)
                    e.Graphics.DrawString(item.Id, fnt, defaultBrush, e.Bounds.X, e.Bounds.Y)
                End Using
            End If
     
     
     
            ' dessine le rectangle de focus
            e.DrawFocusRectangle()
        End Sub
     
     
     
    End Class
    bon code...

Discussions similaires

  1. Couleur bordure select
    Par iro2 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 06/08/2008, 10h38
  2. Listbox mettre ancien selection en couleur
    Par Ardely dans le forum Delphi
    Réponses: 3
    Dernier message: 08/06/2007, 18h19
  3. [C#] ListBox & Couleur
    Par Asiany dans le forum Windows Forms
    Réponses: 10
    Dernier message: 10/10/2006, 09h13
  4. [MFC][ListBox] Couleur du texte
    Par r0d dans le forum MFC
    Réponses: 8
    Dernier message: 08/06/2005, 18h41
  5. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo