首页 > 解决方案 > 设置默认属性失败,因为它是只读的?

问题描述

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

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

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

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

属性“项目”是“只读”

标签: vb.netvb6-migration

解决方案


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..."

推荐阅读