Вам не нужен класс для вашего списка. Вы можете просто создать один в вашей форме. Я добавил в ваш класс собственный конструктор, чтобы вы могли установить все свойства класса в одну строку, как показано в подпункте BuildList
. Мне пришлось добавить обратно конструктор по умолчанию (без параметров). С помощью конструктора по умолчанию свойства устанавливаются индивидуально. Я также добавил переопределение метода .ToString
, чтобы мы могли использовать его в форме. (См. Метод OPCode
)
Класс
Public Class RouteDetails
Public strRoad As String
Public strToLane As String
Public strToDirection As String
Public Sub New()
End Sub
Public Sub New(Road As String, ToLane As String, Direction As String)
strRoad = Road
strToLane = ToLane
strToDirection = Direction
End Sub
Public Overrides Function ToString() As String
Return $"Road is {strRoad}, Lane is {strToLane}, Direction is {strToDirection}"
End Function
End Class
Форма
Private RouteList As New List(Of RouteDetails)
Private Sub BuildList_Click(sender As Object, e As EventArgs) Handles MyBase.Load
Dim Route As New RouteDetails()
Route.strRoad = "Main Street"
Route.strToLane = "Park Lane"
Route.strToDirection = "North East"
RouteList.Add(Route)
'or with the custom constructor
Dim Route2 As New RouteDetails("Wall Steet", "Mulberry Lane", "South West")
RouteList.Add(Route2)
End Sub
Вы можете см. пункты в списке в любом месте формы.
Private Sub OPCode()
MessageBox.Show(RouteList(1).strToLane)
For Each item As RouteDetails In RouteList
ListBox1.Items.Add(item) 'The ListBox calls .ToString on the item for display
Next
End Sub
РЕДАКТИРОВАТЬ
Расширенный код
Public Class Route
Public RouteDetailsList As New List(Of RouteDetails)
Public Name As String
Public Sub New(RDL As List(Of RouteDetails), nme As String)
RouteDetailsList = RDL
Name = nme
End Sub
Public Sub New()
End Sub
Public Overrides Function ToString() As String
Return Name
End Function
End Class
Чтобы проверить код в вызов Form_Load BuildRouteList
Private RouteList As New List(Of Route)
Private Sub BuildRouteList()
Dim Details = {New RouteDetails("MainStreet", "Park Lane", "North East"), New RouteDetails("Wall Steet", "Mulberry Lane", "South West")}
'Uses the construtor List(Of T)(IEnumerable<T>)
Dim R As New Route(New List(Of RouteDetails)(Details), "1")
RouteList.Add(R)
Dim Details2 = {New RouteDetails("Wall Street", "Strawberry Lane", "South West"), New RouteDetails("Pine Street", "Little Maid Lawnd", "North")}
Dim R2 As New Route(New List(Of RouteDetails)(Details2), "2")
RouteList.Add(R2)
End Sub
При нажатии кнопки вызывается OPCode1 (предполагается, что ListBox1 присутствует
Private Sub OPCode1()
MessageBox.Show(RouteList(0).RouteDetailsList(1).strToLane) 'shows Mulberry Lane
For Each item As Route In RouteList
ListBox1.Items.Add(item)
For Each route In item.RouteDetailsList
ListBox1.Items.Add(route) 'The ListBox calls .ToString on the item for display
Next
Next
End Sub