我正在使用VB6中的MSFlexGrid控件,但是我在检索合并列的ColPos
属性时遇到了一些问题。我生成的网格看起来像这样:
-----------------------------
| 8/17/2010 |
-----------------------------
| Column 1 | Column 2 |
-----------------------------
第一行是固定的,两列是合并的,因此第一行中的两列都包含8/17/2010
。
在Click
事件期间,我将文本框放在第二行的单元格上,当我使用FlexGrid {{1}设置其Left
和Top
属性时}}和ColPos
属性,我最终将文本框放在第1列上。即使我在第2列中单击也会发生这种情况。
我已检查RowPos
属性,点击第二列后它已正确设置为2,但Col
和ColPos(1)
都返回相同的值,即距离从第1列的左边缘到控件的左边缘。
当在flexgrid上禁用合并时,问题就会消失,但我宁愿将其保留,因为它使网格更具可读性。
当列中的另一个单元格与另一个单元格合并时,是否有任何方法可以检索所选列的正确位置,还是需要手动计算列位置?
答案 0 :(得分: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