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
| Private Sub DataGridViewCalcul_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGridViewCalcul.Paint
' On "fusionne" les cellules identiques sur plusieurs lignes
Dim i, j, PremiereLigne, DerniereLigne, MaHauteur As Integer
Dim MaFont As New Font(Me.DataGridViewCalcul.DefaultCellStyle.Font.Name, Me.DataGridViewCalcul.DefaultCellStyle.Font.Size, Me.DataGridViewCalcul.DefaultCellStyle.Font.Style, GraphicsUnit.Point)
Dim rct3, rct4 As Rectangle
Dim s3, s4 As SizeF
PremiereLigne = Me.DataGridViewCalcul.FirstDisplayedScrollingRowIndex
DerniereLigne = Me.DataGridViewCalcul.FirstDisplayedScrollingRowIndex + Me.DataGridViewCalcul.DisplayedRowCount(True) - 2
For i = PremiereLigne To DerniereLigne
j = i + 1
If Equals(Me.DataGridViewCalcul.Item(1, i).Value, Me.DataGridViewCalcul.Item(1, j).Value) Then
s3 = e.Graphics.MeasureString(Me.DataGridViewCalcul.Item(3, i).Value, Me.DataGridViewCalcul.Font)
s4 = e.Graphics.MeasureString(Me.DataGridViewCalcul.Item(4, i).Value, Me.DataGridViewCalcul.Font)
MaHauteur = Me.DataGridViewCalcul.Rows(i).Cells(0).Size.Height + Me.DataGridViewCalcul.Rows(j).Cells(0).Size.Height
' 2 lignes de suite sont sur un branchement identique,on regarde s'il y en a d'autres
While j <= DerniereLigne AndAlso Equals(Me.DataGridViewCalcul.Item(1, i).Value, Me.DataGridViewCalcul.Item(1, j + 1).Value)
j += 1
MaHauteur += Me.DataGridViewCalcul.Rows(j).Cells(0).Size.Height
End While
' On détermine la taille des 2 rectangles à dessiner
rct3.X = Me.DataGridViewCalcul.GetColumnDisplayRectangle(3, True).X
rct3.Y = Me.DataGridViewCalcul.GetRowDisplayRectangle(i, True).Y
rct3.Height = MaHauteur - 1
rct3.Width = Me.DataGridViewCalcul.Rows(i).Cells(3).Size.Width - 1
rct4.X = Me.DataGridViewCalcul.GetColumnDisplayRectangle(4, True).X
rct4.Y = rct3.Y
rct4.Width = Me.DataGridViewCalcul.Rows(i).Cells(4).Size.Width - 1
rct4.Height = rct3.Height
' On dessine les rectangles
If Equals(Me.DataGridViewCalcul.Item(3, i).Style.BackColor, Color.LightGray) Then
' On doit dessiner en gris
' colonne 3
With e.Graphics
.FillRectangle(Brushes.LightGray, rct3)
' On met le texte dans le rectangle
.DrawString(Me.DataGridViewCalcul.Item(3, i).Value, MaFont, Brushes.Black, rct3.Left + (rct3.Width / 2) - (s3.Width / 2), rct3.Top + ((rct3.Height / 2) - (s3.Height / 2)))
End With
' colonne 4
With e.Graphics
.FillRectangle(Brushes.LightGray, rct4)
' On met le texte dans le rectangle
.DrawString(Me.DataGridViewCalcul.Item(4, i).Value, MaFont, Brushes.Black, rct4.Left, rct4.Top + ((rct4.Height / 2) - (s4.Height / 2)))
End With
Else
' On doit dessiner en blanc
' colonne 3
With e.Graphics
.FillRectangle(Brushes.White, rct3)
' On met le texte dans le rectangle
.DrawString(Me.DataGridViewCalcul.Item(3, i).Value, MaFont, Brushes.Black, rct3.Left + (rct3.Width / 2) - (s3.Width / 2), rct3.Top + ((rct3.Height / 2) - (s3.Height / 2)))
End With
' colonne 4
With e.Graphics
.FillRectangle(Brushes.White, rct4)
' On met le texte dans le rectangle
.DrawString(Me.DataGridViewCalcul.Item(4, i).Value, MaFont, Brushes.Black, rct4.Left, rct4.Top + ((rct4.Height / 2) - (s4.Height / 2)))
End With
End If
End If
Next i
End Sub |
Partager