2010-08-17 8 views
1

Je travaille avec un contrôle MSFlexGrid dans VB6, mais j'ai également quelques problèmes pour récupérer la propriété ColPos pour les colonnes fusionnées. La grille que j'ai produit ressemble à ceci:VB6 MSFlexGrid - ColPos de colonnes fusionnées

----------------------------- 
|   8/17/2010   | 
----------------------------- 
| Column 1 | Column 2 | 
----------------------------- 

La première ligne est fixe et les deux colonnes sont fusionnées, de sorte que les deux colonnes contiennent 8/17/2010 dans la première rangée.

Pendant l'événement Click, je suis en place d'une zone de texte sur une cellule dans la deuxième rangée, et quand je définir ses propriétés Left et Top utilisant ColPos et RowPos les propriétés du FlexGrid, je me retrouve avec la zone de texte placé sur une colonne 1. Cela se produit même si j'ai cliqué dans la colonne 2.

J'ai vérifié la propriété Col, et il est correctement réglé sur 2 après avoir cliqué sur dans la deuxième colonne, mais ColPos(1) et ColPos(2) renvoient toutes les deux la même valeur, qui est la distance du bord gauche de la colonne 1 du bord gauche de la contrôle. Lorsque la fusion est désactivée sur le flexgrid, le problème disparaît, mais je préfère le laisser car il rend la grille un peu plus lisible.

Est-il possible de récupérer la position correcte de la colonne sélectionnée lorsqu'une autre cellule de la colonne est fusionnée avec une autre ou dois-je calculer manuellement la position de la colonne?

Répondre

0

N'a pas trouvé un moyen de le faire à travers le contrôle, mais voici une fonction que j'ai mis ensemble qui fait l'affaire. Il compte vers l'arrière à partir de la cellule sélectionnée jusqu'à ce qu'il atteigne la cellule la plus à gauche avec laquelle il a été fusionné, puis ajoute les largeurs des cellules fusionnées à la position du premier. Probablement pourrait être nettoyé certains, mais cela fonctionne.

Private Function RealColPos(Col As Integer, grid as MSFlexGrid) 

    With grid 

     Dim i As Integer, merged As Integer 

     i = Col - 1: merged = 0 
     Do While .ColPos(Col) = .ColPos(i) 
      merged = merged + 1 
      i = i - 1 
     Loop 

     If merged > 0 Then 
      RealColPos = .ColPos(Col - merged) 
      Do While merged > 0 
       RealColPos = RealColPos + .ColWidth(Col - merged) 
       merged = merged - 1 
      Loop 
     Else 
      RealColPos = .ColPos(Col) 
     End If 

    End With 

End Function