Vb.net 无法将ListView强制转换为ListViewItem
我觉得这件事很荒谬。我收到一个InvalidCastException,在下面的星号行上显示“无法将'System.Windows.Forms.ListView'类型的对象强制转换为'System.Windows.Forms.ListViewItem'类型”:Vb.net 无法将ListView强制转换为ListViewItem,vb.net,listview,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 Li
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只有一列,而其中一列有更多的列。我已经找到了答案。你知道吗男人们不会相信这有多傻,这根本不是腐败 即使在重新生成表单并得到相同的结果后,这也毫无意义。因此我决定发布它,并查看它是否发生在已发布的版本上。但JIT调试器突然出现,并通知我该问题发生在代码“lvI_ItemChecked”中更深入的事件中: 当我第一次编写该块时,我假设listviewitem启动触发器,而不是listview本身,因此我将发送方声明为listviewitem,而实际上它是listview
现在一切都变得更有意义了。如果我直接将ListViewItems添加到组中而不是ListView,它不会引发异常,但当表单显示时,ListView中除了单列标题外什么都不会显示。我只是运行了您的代码,在那一行中没有出现此类异常。您的项目中可能有损坏的内容。我希望建议尝试使用新表单。这行代码对我来说很好。该死,就像我担心的那样。谢谢。我刚刚恢复了一个已知的旧版本,重新构建了表单,重新添加了代码,还有同样的问题。我甚至将其简化为只初始化新的ListViewItem,然后添加它而不带任何参数。我在项目中的其他表单使用相同类型的代码,这很好。
Private Sub lvI_ItemChecked(lvI As ListViewItem, e As ItemCheckedEventArgs) Handles ListViewLeaveTypes.ItemChecked
changesMade = True
ButtonSave.Enabled = True
End Sub