Задать свойство по умолчанию не удается, потому что это только для чтения? - PullRequest
0 голосов
/ 13 января 2020

Этот код был преобразован из VB6 в VB. Net:

Public prvMainForm = VB6Form    
If prvMainForm IsNot Nothing Then
    CObj(prvMainForm).StatusBar.Panels(1) = "Initializing Folders..."
End If

(Мой код довольно длинный, поэтому я только что добавил этот блок if, в котором происходит фактическая ошибка. )

Ошибка видна в одной строке внутри оператора If:

Свойство 'Item' равно 'ReadOnly'

1 Ответ

5 голосов
/ 13 января 2020

StatusBar.Panels(1) возвращает MSComctlLib.Panel.

StatusBar.Panels(1) = "Initializing Folders...", действительное в VB6 из-за свойств по умолчанию .

Свойства по умолчанию в VB. NET должен иметь параметры. Свойство без параметров не может быть значением по умолчанию и поэтому не может быть опущено. Таким образом, .Panels(1) = "..." понимается VB. NET как попытка заменить весь Panel в свойстве Panels, что недопустимо.

Вы можете посмотреть имя по умолчанию свойство в браузере объектов VB6, которое оказывается Property _ObjectDefault As String, поэтому вы должны иметь возможность:

CObj(prvMainForm).StatusBar.Panels(1).[_ObjectDefault] = "Initializing Folders..."

Как вы заметили, назначение Text должно сделать то же самое:

CObj(prvMainForm).StatusBar.Panels(1).Text = "Initializing Folders..."
...