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 et taille d'Items [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 41
    Points
    41
    Par défaut Listbox et taille d'Items
    Bonjour,

    J'ai un gros problème que je n'arrive pas à résoudre. Je remplis une listbox à l'aide d'une datatable et d'un sqldataadapter. J'ai donc un displaymember et un valuemember.

    Mais je n'arrive absolument pas à changer la taille d'un item, en effet, je ne veux pas qu'ils soient tous "collés" les uns en dessous des autres. En effet je voudrait changer leur propriété item height, mais impossible. Quand je met en mode itemsOwnerDraw, les items ne s'affichent pas du tout.

    Si quelqu'un a une solution...

    Cordialement

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si tu mets en mode OwnerDrawVariable, il faut dessiner toi-même les éléments, sinon ça n'affiche rien en effet... Il faut gérer les évènements DrawItem (pour dessiner un élément) et MeasureItem (pour déterminer la taille d'un élément).

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Il faut gérer les évènements DrawItem (pour dessiner un élément) et MeasureItem (pour déterminer la taille d'un élément).
    D'accord merci, mais je ne vois justement pas comment utiliser DrawItem et Measure Item avec un remplissage des données via Ma DataTable.....

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub listBox1_MeasureItem(ByVal sender As Object, ByVal e As MeasureItemEventArgs) Handles listBox1.MeasureItem
        Dim row = DirectCast(listBox1.Items(e.Index), DataRowView)
        e.ItemWidth = ... ' valeur calculée à partir de row
        e.ItemHeight = ... ' valeur calculée à partir de row
    End Sub
     
    Sub listBox1_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs ) Handles listBox1.DrawItem
        Dim row = DirectCast(listBox1.Items(e.Index), DataRowView)
        ' Utiliser e.Graphics pour dessiner l'élément
        ...
    End Sub
    Pour le dessin, je sais pas ce que tu veux faire exactement... Si tu veux juste dessiner le texte, utilise e.Graphics.DrawString

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 41
    Points
    41
    Par défaut
    Encore merci pour cette réponse rapide.

    Pour la première partie du code, je pense comprendre que l'on définit la taille de chaque item pour la listbox (on définit une ligne et toutes les autres auront la même taille ?).

    Pour ce qui est de la deuxième partie, je ne comprends absolument pas à quoi cela sert ni a quoi va me servir e.graphics (pas réussi à l'utiliser).

    Car dans cette listbox je souhaite afficher une liste de noms en displaymember et leur id associé en Valuemember. J'y arrive très bien avec une listbox "normale'", mais là, je souhaite que la taille de chaque ligne en hauteur soit plus grande que celle d'origine...

    Merci d'avance

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Romain0 Voir le message
    Pour la première partie du code, je pense comprendre que l'on définit la taille de chaque item pour la listbox (on définit une ligne et toutes les autres auront la même taille ?).
    Non, cet évènement est déclenché pour chaque élément de la ListBox. Tu peux savoir de quel élément il s'agit grace à la propriété e.Index

    Citation Envoyé par Romain0 Voir le message
    Pour ce qui est de la deuxième partie, je ne comprends absolument pas à quoi cela sert ni a quoi va me servir e.graphics (pas réussi à l'utiliser).
    Idem, l'évènement DrawItem est appelé pour chaque élément. e.Graphics renvoit un objet qui sert à dessiner (des lignes, des ellipses, des rectangles, du texte, etc). Il faut utiliser ça pour dessiner chaque élément de la liste.



    En fait, si tu veux que tous les items aient la même taille, tu peux mettre DrawMode = OwnerDrawFixed et changer le ItemHeight. Dans ce cas tu n'as pas besoin de gérer l'évènement MeasureItem, mais tu dois quand même faire le dessin manuellement dans DrawItem...

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 41
    Points
    41
    Par défaut
    D'accord merci pour tes explications qui m'aident beaucoup.

    Cependant, même après lecture du cours de Mr Laserre et du MSDN, je ne comprends toujours pas. J'ai bien assimilé le fait que c'est à moi de "dessiner" la listbox (en y ajoutant la scrollbar par exemple), et en définissant les propriétés, mais pour ce qui est de l'ajout de texte via ma DataTable, je ne trouve aucune information.....

    Cordialement

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Romain0 Voir le message
    J'ai bien assimilé le fait que c'est à moi de "dessiner" la listbox (en y ajoutant la scrollbar par exemple)
    Non, tu ne dois pas dessiner la ListBox, tu dois seulement dessiner chaque élément de la liste

    Citation Envoyé par Romain0 Voir le message
    mais pour ce qui est de l'ajout de texte via ma DataTable, je ne trouve aucune information.....
    Bah je te l'ai dit, il faut dessiner le texte avec e.Graphics.DrawString

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Exemple pour afficher le texte des colonnes Id et Name :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub listBox1_DrawItem(sender As Object, e As DrawItemEventArgs)
    	Dim row As DataRowView = DirectCast(listBox1.Items(e.Index), DataRowView)
    	e.DrawBackground()
    	Using b = New SolidBrush(e.ForeColor)
    		Dim text As String = String.Format("{0} - {1}", row("Id"), row("Name"))
    		Dim sf As New StringFormat() With { _
    			Key .LineAlignment = StringAlignment.Center _
    		}
    		e.Graphics.DrawString(text, e.Font, b, e.Bounds, sf)
    	End Using
    End Sub

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 41
    Points
    41
    Par défaut
    Un énorme merci à toi ! J'étais bloqué sur ce problème avec ma DataTable depuis plusieurs semaines !


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WPF] listbox et click sur item
    Par waspy59 dans le forum Windows Presentation Foundation
    Réponses: 23
    Dernier message: 01/03/2010, 00h22
  2. ScrollViewer, Listbox et Sélection d'item
    Par mdordenart dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 28/02/2010, 18h15
  3. Listbox avec bouton dans item : recuperer selectedvalue ?
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 10/03/2009, 13h26
  4. Réponses: 2
    Dernier message: 08/08/2008, 22h27
  5. ListBox auto remplissage/postback items vide
    Par Nadjib dans le forum C#
    Réponses: 4
    Dernier message: 15/09/2007, 09h39

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