Lorsque le contrôle MSHflexgrid est utilisé avec des cellules fusionnées (propriété MergeCells <> 0), les sélections effectuées dans la grille ne sont plus mises en surbrillance.
Voici un petit bout de code tout con pour contourner cet inconvénient.
Source / Exemple :
Dim lastRow As Integer
Private Sub Form_Load()
'Dans la cas où on utilise la fusion de cellules
MSHFlexGrid1.MergeCells = flexMergeRestrictRows
'Code valable pour une selection par ligne
MSHFlexGrid1.FocusRect = flexFocusNone
MSHFlexGrid1.SelectionMode = flexSelectionByRow
lastRow = 0
End Sub
Private Sub MSHFlexGrid1_RowColChange()
Dim actuRow As Integer
Dim i as Integer
With MSHFlexGrid1
'Si pas de changement de ligne on quitte
If lastRow = .Row Then Exit Sub
'Si dernière ligne <> 0 on lui remet les couleurs d'origine
If lastRow <> 0 Then
actuRow = .Row
.Row = lastRow
For i = 0 To .Cols - 1
If i >= .FixedCols Then
.Col = i
.CellBackColor = .BackColor
.CellForeColor = .ForeColor
End If
Next i
.Row = actuRow
End If
'Mise en surbrillance de la ligne selectionnée
For i = 0 To .Cols - 1
If i >= .FixedCols Then
.Col = i
.CellBackColor = .BackColorSel
.CellForeColor = .ForeColorSel
End If
Next i
'on retient la dernière ligne pour la déselectionner par la suite
lastRow = .Row
End With
End Sub
Conclusion :
Ce code n'est valable que pour une sélection par ligne (c'est ce dont j'avais besoin). Mais après il suffit d'adapter ...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.