VB6 MSFlexGrid - ColPos объединенных столбцов

Я работаю с элементом управления MSFlexGrid в VB6, но у меня также есть некоторые проблемы при получении ColPos свойство для объединенных столбцов. Созданная мной сетка выглядит примерно так:

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

Первая строка фиксирована, и два столбца объединены, поэтому оба столбца содержат 8/17/2010 в первом ряду.

В течение Click событие, я помещаю текстовое поле над ячейкой во втором ряду, и когда я устанавливаю его Left а также Top свойства с использованием FlexGrid ColPos а также RowPos свойства, я получаю текстовое поле над столбцом 1. Это происходит, даже если я щелкнул в столбце 2.

Я проверил Col свойство, и оно правильно установлено на 2 после нажатия во втором столбце, но ColPos(1) а также ColPos(2) оба возвращают одно и то же значение, которое является расстоянием от левого края столбца 1 до левого края элемента управления.

Когда объединение отключено на flexgrid, проблема исчезнет, ​​но я бы предпочел оставить его включенным, так как это делает сетку немного более читаемой.

Есть ли способ получить правильную позицию выбранного столбца, когда другая ячейка в столбце объединена с другой, или мне нужно рассчитать положение столбца вручную?

1 ответ

Решение

Не нашел способа сделать это через элемент управления, но вот функция, которую я собрал, которая делает свое дело. Он считает в обратном направлении от выбранной ячейки до тех пор, пока не достигнет самой левой ячейки, с которой он сливается, а затем добавляет ширину объединенных ячеек к позиции первой. Возможно, можно было бы кое-что почистить, но это работает.

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
Другие вопросы по тегам