1

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

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

第一行是固定的,两列合并,所以两列都包含8/17/2010在第一行中。

Click活动期间,我将一个文本框放置在第二行的一个单元格上,当我使用 FlexGrid 的和属性设置它的Left和属性时,我最终将文本框定位在第 1 列上。 即使我点击了也会发生这种情况第 2 列TopColPosRowPos

我检查了该Col属性,单击第二列后它正确设置为 2,但ColPos(1)两者ColPos(2)都返回相同的值,即从列 1 的左边缘到控件左边缘的距离。

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

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

4

1 回答 1

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
于 2010-08-19T16:31:41.110 回答