VB.NET で TreeListView を使用する簡単な例 (または少なくとも 1 つに従うことができます) の作成に取り組んでおり、問題が発生しています。以下のコードを実行すると、最初はすべてが機能します。ペットの名前の枝を持つペット所有者のツリーがあります。しかし、ノードの 1 つを展開してマウスを動かすと、文字列オブジェクトを petowner オブジェクト (オブジェクト クラス) に変換できないというエラーが表示されます。それが何を意味するかは理解していますが、VS はエラーの場所を教えてくれません。また、try-catch でトラップすることもできません。私はいくつかの洞察を探しています。
また、C# から VB への変換が正しいかどうか教えてください。具体的には、ChildrenGetter メソッドと AspectGetter メソッドのデリゲートの代わりにラムダ関数を使用していますか? エラーがどこにあるのか、私はかなり確信しています。
前もって感謝します。
Public Class Form1
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Dim PetOwners As New List(Of PetOwner)
Dim PetOwner As PetOwner
PetOwner = New PetOwner
PetOwner.OwnerName = "Steve"
PetOwner.PetNames.Add("Bob the Cat")
PetOwner.PetNames.Add("Snoop the Dog")
PetOwners.Add(PetOwner)
PetOwner = New PetOwner
PetOwner.OwnerName = "Ann"
PetOwners.Add(PetOwner)
PetOwner = New PetOwner
PetOwner.OwnerName = "Joe"
PetOwner.PetNames.Add("Shoeless")
PetOwners.Add(PetOwner)
Try
tlvPetOwners.CanExpandGetter = Function(po As PetOwner) po.PetNames.Count > 0
tlvPetOwners.ChildrenGetter = Function(po As Object)
Dim RetVal As Object = Nothing
Try
If TypeOf po Is PetOwner Then
RetVal = CType(po, PetOwner).PetNames
Else
RetVal = po
End If
Catch ex As Exception
Debug.Print(ex.ToString)
Finally
End Try
Return RetVal
End Function
Dim OwnerColumn As New OLVColumn()
OwnerColumn.AspectGetter = Function(po As Object)
Dim RetVal As Object = Nothing
Try
If TypeOf po Is PetOwner Then
RetVal = CType(po, PetOwner).OwnerName
Else
RetVal = po
End If
Catch ex As Exception
Debug.Print(ex.ToString)
Finally
End Try
Return RetVal
End Function
tlvPetOwners.Columns.Add(OwnerColumn)
tlvPetOwners.Roots = PetOwners
Catch ex As Exception
Debug.Print(ex.ToString)
End Try
End Sub
End Class
Public Class PetOwner
Public OwnerName As String
Public PetNames As New List(Of String)
End Class