我的VB.NET GUI应用程序中有一个ListView,其中包含有关文件(名称,路径,大小)的信息。
正常使用ListViewItem
和ListViewSubItem
一切正常。但我需要ListViewItems
和ListViewSubItems
中的一些额外信息。所以我从ListViewItem和ListViewSubItem
类创建了2个派生类:
MyListViewItem
Public Class MyListViewItem
Inherits ListViewItem
' additional information
Public m_MyAdditionalInfo As String = Nothing
End Class
MyListViewSubItem
Public Class MyListViewSubItem
Inherits ListViewItem.ListViewSubItem
' additional information
Public m_MyAddtionalInfo As String = Nothing
End Class
使用这些类我尝试以下代码但收到错误消息:
Private Sub TestMyClasses()
Dim x As New MyListViewItem
x.m_MyAdditionalInfo = "listviewitem"
x.Text = "x"
Dim y As New MyListViewSubItem
y.m_MyAddtionalInfo = "listviewsubitem"
y.Text = "y"
x.SubItems.Add(y)
ListView1.Items.Add(x)
Dim z As MyListViewSubItem = Nothing
' conversion causes an error
z = CType(x.SubItems.Item(0), MyListViewSubItem)
MsgBox(z.m_MyAddtionalInfo)
End Sub
无法将“ListViewSubItem”类型的对象转换为“WindowsApplication1.MyListViewSubItem”类型。
“WindowsApplication1”只是我创建派生类的演示应用程序。
在编译期间一切都很好。在运行时,代码会抛出此错误。所以我的问题是为什么我收到此错误消息?
答案 0 :(得分:1)
代码的问题在于索引0处的SubItem实际上是ListViewItem本身。您需要获取索引1处的项目才能转换为MyListViewSubItem类。
z = CType(x.SubItems.Item(1), MyListViewSubItem)
另外,正如Mort所说,如果你只需要用ListViewItem / ListViewSubItem存储一个额外的字符串,你可以考虑使用Tag属性。