无法将ListView强制转换为ListViewItem

时间:2018-07-07 06:29:36

标签: vb.net listview

这对我来说似乎很荒谬。我收到一个InvalidCastException,其中包含“无法将类型为'System.Windows.Forms.ListView'的对象强制转换为类型为'System.Windows.Forms.ListViewItem'的以下加星号的行:

Public Class FormX
    Public DT As DataTable
    Public trnBool As Boolean
    Dim lV As ListView
    Dim trnLVI As ListViewItem
    Dim PClviList As List(Of ListViewItem)

    Private Sub FormAllocationsLeaveTypes_Load(sender As Object, e As EventArgs) Handles Me.Load

        lV = ListViewLT

        lV.Items.Clear()
        lV.Groups.Clear()

        Dim lvGS As ListViewGroup, lvGP As ListViewGroup, lvI As ListViewItem

        lvGS = New ListViewGroup("Shift Type", HorizontalAlignment.Left)
        lvGP = New ListViewGroup("PC Types", HorizontalAlignment.Left)
        lV.Groups.AddRange({lvGS, lvGP})

        trnLVI = New ListViewItem("Training Shifts") With {.Checked = trnBool}
        lV.Items.Add(trnLVI).Group = lvGS '*** Exception occurs here

        PClviList = New List(Of ListViewItem)
        For Each LT As DataRow In DT.Rows
            lvI = New ListViewItem(LT("HrsType").ToString) With {.Checked = Not LT("Show").ToString = String.Empty}
            lV.Items.Add(lvI).Group = lvGP
            PClviList.Add(lvI)
        Next LT

    End Sub
End Class

该异常使它看起来像是我的变量trnLVI的类型为ListView。我什至在即时窗口中检查了trnLVI.GetType.Name,它返回了ListViewItem。

我尝试过分配之前和之后的组,没有区别。我还得到了几乎相同的语法,使用复制的ListView在同一项目的另一种形式中执行相同的操作。唯一的实际区别是,此ListView仅具有1列,而该列还有更多列。

1 个答案:

答案 0 :(得分:0)

我知道了。你们不会相信这是多么愚蠢。根本不是腐败。

即使重建表格并获得相同的结果,这也没有任何意义。因此,我决定发布它,并查看它是否在发布的版本中发生。但是,JIT调试器弹出并通知我,如果我对代码“ lvI_ItemChecked”进行了更深入的处理,则该问题正在发生:

Private Sub lvI_ItemChecked(lvI As ListViewItem, e As ItemCheckedEventArgs) Handles ListViewLeaveTypes.ItemChecked

    changesMade = True
    ButtonSave.Enabled = True

End Sub

当我第一次编写该代码块时,我假设listviewitem启动了触发器,而不是listview本身,所以当发送方实际上是ListView时,我将发送方声明为ListViewItem。

这一切现在变得更有意义了。