我正在将代码从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
答案 0 :(得分:0)
首先,除非使用后期绑定,否则需要将sprIn分配给正确类型的变量,然后使用该变量代替sprIn(或者,可以将方法签名更改为正确类型)。我们不知道该类型是什么,因此没有有效的示例代码。这是我们不知道类型的最佳选择。首先,请确保已为该文件或项目设置了“选项推断”,然后...
Dim newSprd = trycast(sprIn, TheCorrectFarSpreadType)
然后可以用newSprd替换方法签名和上一行中的所有用法之外的所有用法。
第二,sprIn被声明为ByRef,但不应声明为ByRef。它既没有分配新值,也没有将byref传递给分配新值的方法。
最后,我知道我提到过使用后期绑定来替代正确的类型,但是对于需要鸭子输入的情况,应该保留后期绑定。鉴于这是一个热门事件,因此情况并非如此。