无法将ListViewSubItem类型的对象转换为派生类

时间:2015-08-10 19:46:14

标签: vb.net winforms

我的VB.NET GUI应用程序中有一个ListView,其中包含有关文件(名称,路径,大小)的信息。

正常使用ListViewItemListViewSubItem一切正常。但我需要ListViewItemsListViewSubItems中的一些额外信息。所以我从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”只是我创建派生类的演示应用程序。

在编译期间一切都很好。在运行时,代码会抛出此错误。所以我的问题是为什么我收到此错误消息?

1 个答案:

答案 0 :(得分:1)

代码的问题在于索引0处的SubItem实际上是ListViewItem本身。您需要获取索引1处的项目才能转换为MyListViewSubItem类。

z = CType(x.SubItems.Item(1), MyListViewSubItem)

另外,正如Mort所说,如果你只需要用ListViewItem / ListViewSubItem存储一个额外的字符串,你可以考虑使用Tag属性。