将Farpoint电子表格控件成员代码转换为VB.NET时出错

时间:2018-09-07 19:44:12

标签: vb.net vb6-migration

我正在将代码从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

1 个答案:

答案 0 :(得分:0)

首先,除非使用后期绑定,否则需要将sprIn分配给正确类型的变量,然后使用该变量代替sprIn(或者,可以将方法签名更改为正确类型)。我们不知道该类型是什么,因此没有有效的示例代码。这是我们不知道类型的最佳选择。首先,请确保已为该文件或项目设置了“选项推断”,然后...

Dim newSprd = trycast(sprIn, TheCorrectFarSpreadType)

然后可以用newSprd替换方法签名和上一行中的所有用法之外的所有用法。

第二,sprIn被声明为ByRef,但不应声明为ByRef。它既没有分配新值,也没有将byref传递给分配新值的方法。

最后,我知道我提到过使用后期绑定来替代正确的类型,但是对于需要鸭子输入的情况,应该保留后期绑定。鉴于这是一个热门事件,因此情况并非如此。