代码之家  ›  专栏  ›  技术社区  ›  derekerdmann

VB6 MSFlexGrid-合并列的列位置

  •  1
  • derekerdmann  · 技术社区  · 14 年前

    我正在VB6中使用MSFlexGrid控件,但是在检索 ColPos 合并列的属性。我生成的网格如下所示:

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

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

    Click 事件时,我将文本框放置在第二行的单元格上,当我设置其 Left Top 科尔波斯 RowPos 属性,最后文本框位于第1列上。 即使我在第2列中单击,也会发生这种情况

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

    当在flexgrid上禁用合并时,问题就消失了,但我宁愿让它保持打开状态,因为它使网格更具可读性。

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

    1 回复  |  直到 9 年前
        1
  •  0
  •   derekerdmann    14 年前

    还没有找到通过控件实现的方法,但是这里有一个函数,我把它放在一起实现了这个技巧。它从所选单元格向后计数,直到到达与之合并的最左侧单元格,然后将合并单元格的宽度添加到第一个单元格的位置。也许可以清理一些,但这确实管用。

    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
    
    推荐文章