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 :

ajouter checkbox dans listview


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 311
    Points : 255
    Points
    255
    Par défaut ajouter checkbox dans listview
    Bonsoir, j'aimerai ajouter checkbox dans listview1 dans la Column 0 avec OwnerDraw = true.

    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
     
    Private Sub ListView1_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem
            Dim lstView As ListView = TryCast(sender, ListView)
            Dim textAlignment As TextFormatFlags = GetTextAlignment(lstView, e.ColumnIndex)
            Dim itemColor As Color = e.Item.ForeColor
            If (e.Item.Selected AndAlso Not lvEditMode) Then
                If ((e.ColumnIndex = 0) OrElse lstView.FullRowSelect) Then
                    Using Brush As New SolidBrush(Color.Blue)
                        e.Graphics.FillRectangle(Brush, e.Bounds)
                    End Using
                Else
                    e.DrawBackground()
                End If
            End If
            TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, itemColor, textAlignment)
        End Sub
    pouvez-vous m'aider à ajouter chekbox dans listview quand OwnerDraw est sur true?

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 311
    Points : 255
    Points
    255
    Par défaut
    j'ai trouver la solution mais j'ai deux problème .

    problème numéro 1 : comment cacher le texte qui dépasse de la columns 0 derrière la columns 1.
    problème numéro 2 : j'ai décalé le texte par rapport au checkbox, mais dans la columns 1 le texte n'est pas décalé sur la gauche.

    voici en image :
    Nom : Capture d’écran 2024-08-22 070703.png
Affichages : 31
Taille : 5,0 Ko

    mon code modifié :
    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
     
    Private Sub ListView1_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem
            Dim lstView As ListView = TryCast(sender, ListView)
            Dim textAlignment As TextFormatFlags = GetTextAlignment(lstView, e.ColumnIndex)
            Dim itemColor As Color = e.Item.ForeColor
            Dim state = If(e.Item.Checked, CheckBoxState.CheckedNormal, CheckBoxState.UncheckedNormal)
            Dim glyphSize As Size = CheckBoxRenderer.GetGlyphSize(e.Graphics, state)
            Dim checkPad As Integer = (e.Bounds.Height - glyphSize.Height) / 2
            Dim pt As New Point(e.Bounds.X + 2, e.Bounds.Y + 2)
            If e.ColumnIndex = 0 Then
                Dim rect As New Rectangle(pt, New Size(16, 16))
                e.Graphics.DrawRectangle(New Pen(New SolidBrush(Color.Lime), 2), New Rectangle(rect.X, rect.Y + 1, rect.Width, rect.Height))
                If state = CheckBoxState.CheckedNormal Then
                    e.Graphics.FillRectangle(New SolidBrush(Color.Red), New Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3))
                End If
            ElseIf (e.Item.Selected AndAlso Not lvEditMode) Then
                If ((e.ColumnIndex = 0) OrElse lstView.FullRowSelect) Then
                    Using Brush As New SolidBrush(Color.Blue)
                        e.Graphics.FillRectangle(Brush, e.Bounds)
                    End Using
                Else
                    e.DrawBackground()
                End If
            End If
            TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, New Point(pt.X + 16, pt.Y + 10), itemColor, textAlignment)
        End Sub
    pouvez-vous me dire comment cacher le texte qui dépasse derrière la columns 1 et recentré le texte dans la columns 1 faire la gauche? merci d'avance

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 311
    Points : 255
    Points
    255
    Par défaut
    salut, je viens trouvé la solution à mon problème. quand je déplace la souris sur la columns 0 ça enlève grindline en entre 2 mots.

    voici en image :
    Nom : Capture d’écran 2024-08-22 215019.png
Affichages : 3
Taille : 4,5 Ko

    quand je clique sur l’élément 0 la ligne revient.

    mon code en code modifié :
    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
    Private Sub ListView1_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem
            Dim lstView As ListView = TryCast(sender, ListView)
            Dim textAlignment As TextFormatFlags = GetTextAlignment(lstView, e.ColumnIndex)
            Dim itemColor As Color = e.Item.ForeColor
            If (e.Item.Selected AndAlso Not lvEditMode) Then
                If ((e.ColumnIndex = 0) OrElse lstView.FullRowSelect) Then
                    Using Brush As New SolidBrush(Color.Blue)
                        e.Graphics.FillRectangle(Brush, e.Bounds)
                    End Using
                End If
            Else
                e.DrawBackground()
            End If
            If (e.ColumnIndex = 0) Then
                Dim state As CheckBoxState = If(e.Item.Checked, CheckBoxState.CheckedNormal, CheckBoxState.UncheckedNormal)
                Dim glyphSize As Size = CheckBoxRenderer.GetGlyphSize(e.Graphics, state)
                Dim checkPad As Integer = (e.Bounds.Height - glyphSize.Height) / 2
                Dim pt As New Point(e.Bounds.X + 2, e.Bounds.Y + 2)
                Dim rect As New Rectangle(pt, New Size(16, 16))
                e.Graphics.DrawRectangle(New Pen(New SolidBrush(Color.Lime), 2), New Rectangle(rect.X, rect.Y + 1, rect.Width, rect.Height))
                If state = CheckBoxState.CheckedNormal Then
                    rect.Inflate(-3, -3)
                    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
                    e.Graphics.DrawLines(New Pen(New SolidBrush(Color.OrangeRed), 2), New Point() {New Point(rect.Left, rect.Bottom - rect.Height / 2), New Point(rect.Left + rect.Width / 3, rect.Bottom), New Point(rect.Right, rect.Top)})
                    e.Graphics.SmoothingMode = SmoothingMode.Default
                    rect.Inflate(+3, +3)
                End If
                TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, New Point(pt.X + 16, pt.Y + 10), itemColor, textAlignment)
            Else
                TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, itemColor, textAlignment)
            End If
        End Sub
    avez-vous une solution pour éviter enlevé gridligne entre les mots dans listview(voir image)?

Discussions similaires

  1. checkbox dans Listview
    Par CLion dans le forum C#
    Réponses: 1
    Dernier message: 18/09/2014, 00h28
  2. Problème checkbox dans listview
    Par Antri dans le forum ASP.NET
    Réponses: 5
    Dernier message: 04/05/2012, 21h34
  3. [WPF C#] Checkbox dans listview
    Par miky77 dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 02/09/2011, 08h21
  4. Ajouter subitems dans listview (boucle)
    Par aus3004 dans le forum VB.NET
    Réponses: 8
    Dernier message: 29/10/2010, 23h55
  5. [WD-2003] Ajouter Checkbox dans sommaire
    Par xoum89 dans le forum VBA Word
    Réponses: 10
    Dernier message: 21/04/2010, 14h27

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