基于MarkL 的答案,您可以使用实际的 VB 接口重载来获得您想要的。
这个想法是创建一个接口,在网格上公开您需要的任何属性或功能,然后创建两个类,每个类都实现该接口并在内部操作实际的网格。
这种包装替代了两种网格类型本质上不共享公共接口的事实。(我使用 OLEView 查看了 IDL)。
然后,您可以使用该接口作为您当前Object
用于代表实际网格类的每个位置的类型。如果接口是全面的并且它的方法/属性被适当地命名,那么您不需要进行任何其他代码更改。
示例(伪)代码...
界面:
'In file for interface IGridWrapper
Function Rows
End Function
Function TextMatrix(i as Integer, j as Integer)
End Function
'Any others...
包装类 1:
' In file for class "MSFlexGridWrapper"
Implements IGridWrapper
Private m_grid as MSFlexGrid
Sub Init(MSFlexGrid grid)
Set m_grid = grid
End Sub
Function IGridWrapper_Rows
IGridWrapper_RowCount = m_grid.Count
End Function
Function IGridWrapper_Textmatrix(i as Integer, j as Integer)
'etc.
End Function
'Any others...
包装类 2:
' In file for class "MSHFlexGridWrapper"
Implements IGridWrapper
Private m_grid as MSHFlexGrid
Sub Init(MSHFlexGrid grid)
Set m_grid = grid
End Sub
Function IGridWrapper_Rows
IGridWrapper_RowCount = m_grid.Count
End Function
Function IGridWrapper_Textmatrix(i as Integer, j as Integer)
'etc.
End Function
'Any others...
使用包装器的代码:
Public Function gridloop(MSFG1 As IGridWrapper) As Long
(注意 - 这些都没有通过编译器进行精确的语法检查)