2010-08-17 47 views
1

我正在使用VB6中的MSFlexGrid控件,但我也有一些問題檢索合並列的ColPos屬性。我已經生成的網格看起來是這樣的:VB6 MSFlexGrid - 合併列的ColPos

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

第一行是固定的兩列被合併,這樣既列包含8/17/2010第一排。

Click事件,我在第二行中定位文本框在一個單元格,當我設置使用的FlexGrid的ColPosRowPos性質及其LeftTop性質,我最終定位在列中的文本框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