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

Windows Forms Discussion :

Définir le style d'une ligne dans un listbox


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut Définir le style d'une ligne dans un listbox
    Salut,

    Voilà je cherche à faire quelque chose de surement très simple.

    J'ai un listbox dans lequel j'insert des objects (grace à ToString ). Je souhaiterai que selon une variable dans mon object, que la ligne qui le représente dans le listbox change de style.

    Pour être plus clair, si ma variable isBlue est égale à true et bien que la ligne dans la listbox en fond bleu avec une police 12 grasse.

    Le problème n'est pas la dépendance de la ligne avec la variable, avec les events je me débrouille très bien pour ça. C'est juste que je ne sais pas comment dire au listbox de passer "cette" ligne en "ce" style.

    Merci


  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut rep
    Salut,

    Moi je farais comme suit :
    La listBox a un événement "DrawItem" avec une siganture comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    la variable "e" te permet d'accéder à un objet graphics ce qui te permet de dessiner dans chaque ligne. Aussi selon une propriété de mon Objet de la ligne (sender) je dessinerais un rectancle de couleur differente pour le fond e.Graphics.DrawRectancle(... et pour le texte : e.Graphics.DrawString(... ou l'on peut, entre autre, définir la Font utilisée il me semble.

    A tester ...

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Merci de ta réponse.

    J'ai tenté d'utilisé ça, mais l'évennement en question n'est pas appelé dans la procédure que j'emploie. Je ne sais pas à quel moment celui ci est produit, mais visiblement, ce n'est pas quand je voudrais.

    Je cherche toujours un moyen de modifier ce style...

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut
    Salut tous le monde !

    Il se trouve que j'avais le même souci, mais en suivant la piste de dfrthreads, j'ai trouvé la solution... sur MSDN .
    Ce n'est peut être plus d'actualité pour toi Sunsawe, mais ça peut toujours servir pour les autres... Alors j'explique :

    1°) Premièrement il faut bien utiliser l'évènement drawItem de ta listbox. Par défaut ta listbox n'utilisera pas cet évènement, il faut donc mettre sa propriété 'drawMode' égale à "OwnerDrawVariable" (ou "OwnerDrawFixed", j'ai pas bien saisie la différence...).

    2°) Ensuite il faut créer la fonction adéquate et l'associer à l'évènement. Voici la mienne :
    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
        Private Sub lstAgences_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles lstAgences.DrawItem
            'On commence par dessiner le background'
            e.DrawBackground()
     
            'Voici la mise en forme conditionnelle'
            If e.Index >= 0 Then
                'Par défaut la couleur du text est noire'
                Dim colorTexte As Brush = Brushes.Black
     
                'Dans l exemple on colorie le 5e item en rouge'
                If e.index = 4 Then
                    colorTexte = Brushes.Red
                End If
     
                'Il nous reste plus qu à dessiner l item'
                e.Graphics.DrawString("le texte a afficher", _
                                               e.Font, colorTexte, e.Bounds, _ 
                                               StringFormat.GenericDefault)
           End If
     
           'Ici on dessine le célèbre rectangle de focus qui colore la ligne sélectionnée bleue...'
           e.DrawFocusRectangle()
    End Sub
    Cette fonction sera appelée à chaque fois qu'un élément de la listbox est redessiné.

    Voilà ! J'ai longtemps cherché sur le net, j'espère que ça servira à d'autres.

    Pour plus d'infos, voici le lien MSDN où j'ai trouvé les infos : http://msdn2.microsoft.com/en-us/lib....drawmode.aspx

    Je pense que le tag "Résolu" est de circonstance...
    A bientôt !

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Citation Envoyé par andlio
    Par défaut ta listbox n'utilisera pas cet évènement, il faut donc mettre sa propriété 'drawMode' égale à "OwnerDrawVariable" (ou "OwnerDrawFixed", j'ai pas bien saisie la différence...).
    Salut,

    pour la difference entre les deux, OwnerDrawFixed te permet de dessiner toi meme tes items avec une taille d'item fixe (celle definie par la proprieté ItemHeight du ListBox en question), quand tu places DrawMode sur OwnerDrawVariable tu peux t'abonner à l'event MeasureItem(object, MeasureItemEventArgs) pour faire varier la taille de l'item avant de le dessiner, suivant ce que tu veux afficher et ainsi, tu pourras recupererer la taille specifiée dans ton event DrawItem.

Discussions similaires

  1. Selectionner une ligne dans un listbox
    Par coco74one dans le forum VB.NET
    Réponses: 6
    Dernier message: 13/12/2012, 21h57
  2. Effacer une ligne dans la table nat
    Par vbcasimir dans le forum Sécurité
    Réponses: 2
    Dernier message: 11/01/2004, 01h15
  3. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 23h59
  4. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 11h30
  5. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 01h57

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