2010-08-17 45 views
1

我正在使用VB6中的MSFlexGrid控件,但我也有一些问题检索合并列的ColPos属性。我已经生成的网格看起来是这样的:VB6 MSFlexGrid - 合并列的ColPos

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

第一行是固定的两列被合并,这样既列包含8/17/2010第一排。

Click事件,我在第二行中定位文本框在一个单元格,当我设置使用的FlexGrid的ColPosRowPos性质及其LeftTop性质,我最终定位在列中的文本框1. 即使我点击第2列,也会发生这种情况。

我已检查Col财产,并点击第二列后它正确设置为2,但ColPos(1)ColPos(2)都返回相同的值,这是的左边缘从第1列的左边缘的距离控制。

当在flexgrid上禁用合并时,问题消失,但我宁愿将其保留,因为它使网格更具可读性。

当列中的另一个单元格与另一个单元格合并时,还是需要手动计算列位置时,是否有任何方法可以检索所选列的正确位置?

回答

0

还没有找到一种方法来通过控制,但这里有一个功能,我把它放在一起,就可以做到这一点。它从所选单元格向后计数,直到它到达与之合并的最左边单元格,然后将合并单元格的宽度添加到第一个单元格的位置。可能可以清理一些,但这确实有效。

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