设置默认属性失败,因为它是只读的?

Sne*_*hil 0 vb.net vb6-migration

此代码已从 VB6 转换为 VB.Net:

Public prvMainForm = VB6Form    
If prvMainForm IsNot Nothing Then
    CObj(prvMainForm).StatusBar.Panels(1) = "Initializing Folders..."
End If
Run Code Online (Sandbox Code Playgroud)

(我的代码很长,所以我刚刚添加了这个if块,它是实际发生错误的地方。)

在 If 语句中的单行上可以看到错误:

属性“项目”是“只读”

GSe*_*erg 5

StatusBar.Panels(1)返回一个MSComctlLib.Panel.

StatusBar.Panels(1) = "Initializing Folders..."由于默认属性,在 VB6 中有效。

VB.NET 中的默认属性必须有参数。无参数属性不能是默认值,因此不能省略。因此,.Panels(1) = "..."通过VB.NET理解为试图更换整个PanelPanels属性,这是不允许的。

您可以在 VB6 对象浏览器中查找默认属性的名称,结果是Property _ObjectDefault As String,因此您应该能够执行以下操作:

CObj(prvMainForm).StatusBar.Panels(1).[_ObjectDefault] = "Initializing Folders..."
Run Code Online (Sandbox Code Playgroud)

正如您所观察到的,分配Text应该做同样的事情:

CObj(prvMainForm).StatusBar.Panels(1).Text = "Initializing Folders..."
Run Code Online (Sandbox Code Playgroud)