VB6 MSFlexGrid - 合并列的ColPos

时间:2010-08-17 17:48:42

标签: vb6 msflexgrid

我正在使用VB6中的MSFlexGrid控件,但是我在检索合并列的ColPos属性时遇到了一些问题。我生成的网格看起来像这样:

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

第一行是固定的,两列是合并的,因此第一行中的两列都包含8/17/2010

Click事件期间,我将文本框放在第二行的单元格上,当我使用FlexGrid {{1}设置其LeftTop属性时}}和ColPos属性,我最终将文本框放在第1列上。即使我在第2列中单击也会发生这种情况。

我已检查RowPos属性,点击第二列后它已正确设置为2,但ColColPos(1)都返回相同的值,即距离从第1列的左边缘到控件的左边缘。

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

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

1 个答案:

答案 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