Ошибка при преобразовании кода элемента управления электронной таблицы Farpoint в VB.NET
Я обновляю код с 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 ответ
Во-первых, если вы не используете позднюю привязку, вам нужно присвоить sprIn переменной правильного типа, а затем использовать эту переменную вместо sprIn (в качестве альтернативы вы можете изменить сигнатуру метода на правильный тип). Мы не можем знать, что это за тип, поэтому нет рабочего примера кода. Это лучшее, что мы можем сделать, не зная типа. Сначала убедитесь, что опция Infer On установлена для этого файла или проекта, затем...
Dim newSprd = trycast(sprIn, TheCorrectFarSpreadType)
Затем вы можете заменить все виды использования, кроме одного в сигнатуре метода и приведенной выше строке, на newSprd.
Во-вторых, sprIn объявлен как ByRef, но не должен быть. Он не присваивает новое значение и не передает byref методу, который присваивает новое значение.
Наконец, я знаю, что упомянул позднюю привязку как альтернативу правильному типу, но поздняя привязка должна быть зарезервирована для ситуаций, когда вам нужно вводить утку. Учитывая, что это событие, которое поражается, это не тот случай.