Я перенес элемент управления VB6 на Vb.Net, и когда у меня был строгий параметр, я получаю сообщение об ошибке «Option Strict On запрещает позднее связывание». Ниже я подробно упомянул код VB6, а также перенесенный код.

Код VB6: -

Private m_colRows As Collection    'Represents the rows in a table
Private m_lngCurrCol As Long 'Control variable for Col Property
Private m_lngCurrRow As Long 'Control variable for Row Property

Public Property Let CellText(ByVal strText As String)
     m_colRows(m_lngCurrRow)(m_lngCurrCol).Text = strText
End Property
Public Property Get CellText() As String
   CellText = m_colRows(m_lngCurrRow)(m_lngCurrCol).Text
End Property

Ниже приведен перенесенный код (Vb.Net)

Public Property CellText() As String
    Get
        CellText = m_colRows.Item(m_lngCurrRow)(m_lngCurrCol).Text
    End Get
    Set(ByVal Value As String)
        m_colRows.Item(m_lngCurrRow)(m_lngCurrCol).Text = Value
    End Set
End Property

Option Strict On запрещает позднее связывание, и мне нужна помощь в изменении кода для работы с ним.

1
vandy 22 Окт 2018 в 17:40

2 ответа

Лучший ответ

Тип VB6 Collection содержит ссылки типа Object. Если вы хотите использовать метод .Text для его членов, вам придется либо преобразовать ColRows в общую коллекцию (например, List(Of Control())}, либо преобразовать содержащиеся в ней ссылки в {{ X5}} перед использованием (например,

Public Property CellText() As String
    Get
        CellText = CType(m_colRows.Item(m_lngCurrRow), Control())(m_lngCurrCol).Text
    End Get
    Set(ByVal Value As String)
        CellText = CType(m_colRows.Item(m_lngCurrRow), Control())(m_lngCurrCol).Text = Value
    End Set
End Property

Не видя больше вашего кода, я не могу сказать, какой подход будет проще и / или даст лучшие результаты. Я предполагаю, что использование общей коллекции, скорее всего, приведет к более чистому коду, но тип Collection в стиле VB6 поддерживает некоторые конструкции, которых обычно не делают общие, включая возможность изменять коллекцию во время перечисления, что иногда может сделать портирование сложным.

3
supercat 22 Окт 2018 в 15:00

Сообщение правильное. Option Strict не запрещает позднее связывание.

https://docs.microsoft.com/en-us/dotnet/visual-basic/misc/bc30574

Вы можете выбрать позднюю привязку или строгую опцию, но не можете и того, и другого.

Ваши единственные варианты -

  • Отключить позднее связывание
  • Измените свой код, чтобы он не использовал позднюю привязку
  • Отключите "строгий параметр"
1
Terry Carmen 24 Окт 2018 в 18:43
52931961