首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并列的VB6 MSFlexGrid - ColPos

合并列的VB6 MSFlexGrid - ColPos
EN

Stack Overflow用户
提问于 2010-08-17 17:48:41
回答 1查看 5.8K关注 0票数 1

我正在VB6中使用一个VB6控件,但我在检索合并列的ColPos属性时也遇到了一些问题。我生成的网格如下所示:

代码语言:javascript
复制
-----------------------------
|         8/17/2010         |
-----------------------------
|   Column 1  |  Column 2   |
-----------------------------

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

Click事件期间,我在第二行的一个单元格上定位一个文本框,当我使用FlexGrid的ColPosRowPos属性设置其LeftTop属性时,我的textbox定位在第1列上。即使在第2列中单击,也会发生这种情况。

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

当在柔性网格上禁用合并时,问题就消失了,但我宁愿继续使用它,因为它使网格更加可读性更强。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-19 16:31:41

还没有找到通过控件来完成这个任务的方法,但是这里有一个函数,我把它放在一起完成了这个任务。它从选定的单元格向后计数,直到到达与其合并的最左边单元格,然后将合并单元格的宽度添加到第一个单元格的位置。也许可以清理一些,但这确实有效。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3505348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档