2010-08-17 6 views
1

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

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

ответ

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 
Смежные вопросы