我正在将代码从VB 6升级到VB.NET,以下代码给出了一个错误:
Col is not member of control
同样,它为所有成员(行,动作等)抛出相同的错误。
Private Sub VGILeaveCell(ByRef sprIn As System.Windows.Forms.Control,
ByVal lngCol As Integer, ByVal lngRow As Integer,
ByVal lngNewCol As Integer, ByVal lngNewRow As Integer)
'
' Check to see if location of new cell is locked
'
sprIn.col
sprIn.Row = lngNewRow
sprIn.Col = lngNewCol
'
' If it is locked, set the active cell back to where it was before
'
If sprIn.Lock Then
sprIn.Row = lngRow
sprIn.Col = lngCol
sprIn.Action = enmVGIAction.SS_ACTION_ACTIVE_CELL
'
' If it is not locked, allow the movement to proceed
'
Else
sprIn.Row = lngNewRow
sprIn.Col = lngNewCol
sprIn.Action = enmVGIAction.SS_ACTION_ACTIVE_CELL
End If
End Sub
首先,除非使用后期绑定,否则需要将sprIn分配给正确类型的变量,然后使用该变量而不是sprIn(或者您可以将方法签名更改为正确的类型)。我们无法知道该类型是什么,因此没有可用的示例代码。这是我们在不知道类型的情况下可以做的最好的事情。首先确保为该文件或项目设置Option Infer On,然后......
Dim newSprd = trycast(sprIn, TheCorrectFarSpreadType)
然后,您可以使用newSprd替换方法签名和上面一行之外的所有用法。
其次,sprIn被声明为ByRef,但不应该。它既没有赋值,也没有将byref传递给赋值的方法。
最后,我知道我提到了后期绑定作为获得正确类型的替代方法,但是后期绑定应该保留用于需要进行鸭子输入的情况。鉴于这是一个被击中的事件,这不是这种情况。