VB6 MSFlexGrid - ColPos объединенных столбцов - PullRequest
1 голос
/ 17 августа 2010

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 19 августа 2010

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

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
...