1

VB6でMSFlexGridコントロールを使用していColPosますが、マージされた列のプロパティを取得する際にも問題が発生します。私が生成したグリッドは次のようになります。

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

最初の行は固定され、2つの列がマージされるため、両方の列が8/17/2010最初の行に含まれます。

イベント中Clickに、2行目のセルの上にテキストボックスを配置し、FlexGridのプロパティを使用してそのプロパティを設定するLeftと、テキストボックスが列1の上に配置されます。 これは、クリックした場合でも発生します。列2TopColPosRowPos

プロパティを確認しましたColが、2番目の列をクリックすると、正しく2に設定されましたがColPos(1)ColPos(2)どちらも同じ値を返します。これは、列1の左端からコントロールの左端までの距離です。

フレックスグリッドでマージを無効にすると、問題は解決しますが、グリッドが少し読みやすくなるため、そのままにしておきます。

列内の別のセルが別のセルとマージされたときに、選択した列の正しい位置を取得する方法はありますか、または列の位置を手動で計算する必要がありますか?

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 に答える