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