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 :

Datagridview paint solidbrush


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 61
    Par défaut Datagridview paint solidbrush
    Bonjour a tous,

    je vous écris car j'ai un soucis et que je ne trouve pas la solution a mon problème.

    j'affiche un datagridview qui contient des equipements.

    ses equipements sont rangées par rubrique, j'ai donc naturellement décider de mettre l'entête de rubrique et de colorier la ligne qui contient la rubrique (une sorte d'en tête)
    mais j'ai un soucis le solid brush ne s'active "graphiquement" que si je clic sur la ligne en question, par contre si la ligne est déjà à l'affichage au moment de la création elle est bien mise en vert (j'ai mis les entête en vert)

    donc comment faire? :s

    ci dessous ma classe d'override du paint de datagridview

    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
     Private Class DGVRubrique
            Inherits DataGridViewRow
     
            ' Cette classe modifie le comportement du DataGridView si on est sur une ligne de rubrique
            Protected Overrides Sub Paint(ByVal graphics As System.Drawing.Graphics, ByVal clipBounds As System.Drawing.Rectangle, _
                                          ByVal rowBounds As System.Drawing.Rectangle, ByVal rowIndex As Integer, _
                                          ByVal rowState As System.Windows.Forms.DataGridViewElementStates, _
                                          ByVal isFirstDisplayedRow As Boolean, ByVal isLastVisibleRow As Boolean)
                MyBase.Paint(graphics, clipBounds, rowBounds, rowIndex, rowState, isFirstDisplayedRow, isLastVisibleRow)
                ' Si la valeur de la 1ère cellule est à -1, c'est que c'est une rubrique !
                ' On va donc lui passer sa couleur à la couleur vert, et on vire certaines colonnes
                If Me.Index > -1 Then
                    ' On n'est pas sur la ligne de header
                     If Not IsNothing(Me.Cells(0)) AndAlso Me.Cells(8).Value = 1 Then
                        With leStyle
                            .BackColor = Principale.STYLEGlobale.couleurFondEntete
                            .SelectionBackColor = .BackColor
                            .ForeColor = Principale.STYLEGlobale.couleurPoliceEntete
                            .SelectionForeColor = .ForeColor
                            Using uneFont As New Font("Trebuchet MS", 8.25!, System.Drawing.FontStyle.Bold, _
                                                      System.Drawing.GraphicsUnit.Point, CType(0, Byte))
                                .Font = Principale.STYLEGlobale.PoliceEntete
                            End Using
                        End With
     
                        Me.DefaultCellStyle = leStyle
                        ' Là on modifie la couleur de fond de la ligne entière
     
                        Using unBrushPerso As New SolidBrush(Principale.STYLEGlobale.couleurFondEntete)
                            ' Ce rectangle c'est la ligne entière
                            'Dim rect As Rectangle = Me.DataGridView.GetRowDisplayRectangle(Me.Index, False)
                            ' Rectangle correspondant à la cellule de départ du brush de cette ligne
                            With Me.DataGridView
     
                                Dim rectCelluleLibCode As Rectangle = .GetCellDisplayRectangle(3, Me.Index, False)
                                ' Rectangle correspondant à la dernière cellule de la ligne
                                Dim rectDernièreCellule As Rectangle = .GetCellDisplayRectangle(Me.DataGridView.Columns.Count - 1, Me.Index, False)
                                ' On fait donc un rectangle de la cellule suivant le libellé, jusqu'à la fin
                                ' Et on lui applique la couleur de fond qui va bien
                                With rectCelluleLibCode
                                    Dim rect2 As New Rectangle(.X, .Y, rectDernièreCellule.X + rectDernièreCellule.Width _
                                                               - .X, .Height)
                                    graphics.FillRectangle(unBrushPerso, rect2)
                                End With
                                'on redessine également la 2ème cellule 
                                Dim rectCellulePays As Rectangle = .GetCellDisplayRectangle(1, Me.Index, False)
                                With rectCellulePays
                                    Dim rect1 As New Rectangle(.X, .Y, .Width, .Height)
                                    graphics.FillRectangle(unBrushPerso, rect1)
                                End With
                            End With
                        End Using
                    End If
                End If
            End Sub
        End Class
    donc voila si vous avez une idée je suis preneur.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Regarde plutot avec l'evenement rowprepaint pour colorier la ligne en fonction de ton critère.

Discussions similaires

  1. datagridview scroll paint
    Par windows2056 dans le forum C#
    Réponses: 0
    Dernier message: 15/09/2011, 14h10
  2. Datagridview Cell Painting
    Par olibara dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/07/2010, 10h32
  3. Réponses: 7
    Dernier message: 03/08/2004, 16h33
  4. [Paint][Color] determiner la couleur
    Par itsmii dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 27/05/2004, 13h15
  5. [TP]Paint en Pascal
    Par Giovanny Temgoua dans le forum Turbo Pascal
    Réponses: 17
    Dernier message: 03/12/2003, 22h35

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