这对我来说似乎很荒谬。我收到一个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列,而该列还有更多列。
答案 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。
这一切现在变得更有意义了。