程序应该从文本框中获取文本,将其组合成一个 NewCustomer 元素,然后将其显示在列表框中。下面是我应该添加的代码,我试过 lstCustomer.add(txtFirstname.text) 但它变成了一个错误。预先感谢您的帮助。
Public Class Form1
Private myCustomers As New ArrayList
Public ReadOnly Property SelectedCustomer As Customer
Get
Dim index As Integer = lstCustomer.SelectedIndex
If index <> -1 Then
Return lstCustomer.Items(index)
Else
Return Nothing
End If
End Get
End Property
Public Sub NewCustomer(ByVal fn As String, ByVal ln As String, ByVal a As Integer, ByVal e As String)
Dim temp As Customer
temp.FirstName = fn
temp.LastName = ln
temp.Age = a
temp.Email = e
myCustomers.Add(temp)
Me.lstCustomer.Items.Add(temp)
End Sub
Private Sub BtnTest_Click(sender As Object, e As EventArgs) Handles BtnTest.Click
NewCustomer("Homer", "Simpson", 40, "HSimpson@springf.com")
NewCustomer("Bruce", "Banner", 44, "green@giant.com")
End Sub
Public Sub displayCustomer(ByVal temp As Customer)
Me.TxtName.Text = temp.name
Me.TxtFirstName.Text = temp.FirstName
Me.TxtLastName.Text = temp.LastName
Me.TxtAge.Text = temp.Age
Me.TxtEmail.Text = temp.Email
End Sub
Private Sub BtnAdd_Click(sender As Object, e As EventArgs) Handles BtnAdd.Click
lstCustomer.add(TxtFirstName.Text And TxtLastName.Text And TxtEmail.Text And TxtAge.Text)
End Sub
答案 0 :(得分:2)
我建议使用数据绑定,这样可以更轻松地使用 ListBox。首先确保在 ToString
类中覆盖 Customer
以使可在 ListBox 中显示
Public Class Customer
Public Property FirstName As String
Public Property LastName As String
Public Property Age As Integer
Public Property Email As String
Public Overrides Function ToString() As String
Return $"{FirstName} {LastName} ({Age}) {Email}"
End Function
End Class
然后我们使用 List(Of Customer)
而不是 ArrayList
。优点是 List(Of )
是强类型的,即它的元素属于 Customer
类型,而 ArrayList
具有 Object
类型的元素。
此外,我们创建了一个 BindingList(Of Customer)
类型的包装器来包装我们的列表以启用 ListBox 的自动更新。示例:
Public Class Form1
Dim customers As New List(Of Customer)
Dim customersBinding As BindingList(Of Customer)
Public Sub New()
InitializeComponent()
customersBinding = New BindingList(Of Customer)(customers)
lstCustomer.DataSource = customersBinding
End Sub
Private Sub NewCustomer(ByVal fn As String, ByVal ln As String, ByVal a As Integer, ByVal e As String)
Dim customer As New Customer With {
.FirstName = fn,
.LastName = ln,
.Age = a,
.Email = e
}
customersBinding.Add(customer)
lstCustomer.SelectedItem = customers(customers.Count - 1)
' or lstCustomer.SelectedIndex = customers.Count - 1
End Sub
Private Sub BtnTest_Click(sender As Object, e As EventArgs) Handles BtnTest.Click
NewCustomer("Homer", "Simpson", 40, "HSimpson@springf.com")
NewCustomer("Bruce", "Banner", 44, "green@giant.com")
End Sub
Public Sub DisplayCustomer(ByVal customer As Customer)
TxtFirstName.Text = customer.FirstName
TxtLastName.Text = customer.LastName
TxtAge.Text = customer.Age.ToString()
TxtEmail.Text = customer.Email
End Sub
Private Sub lstCustomer_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstCustomer.SelectedIndexChanged
Dim index As Integer = lstCustomer.SelectedIndex
If index >= 0 Then
DisplayCustomer(customers(index))
End If
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
NewCustomer(TxtFirstName.Text, TxtLastName.Text, CInt(TxtAge.Text), TxtEmail.Text)
End Sub
End Class
在构造函数中,我们创建绑定列表并将其设置为 ListBox 的数据源。
看看 Sub NewCustomer
如何只将新客户添加到绑定列表中。这也会将客户插入到包装列表中,同时更新 ListBox。
我们还自动选择 ListBox 中最后插入的客户
lstCustomer.SelectedItem = customers(customers.Count - 1)
或(更简单)
lstCustomer.SelectedIndex = customers.Count - 1
当用户在列表框中选择另一个客户时,我们使用 SelectedIndexChanged
事件自动在文本框中显示该客户。
您还可以扩展数据绑定以自动将客户对象绑定到文本框。你会找到很多关于这个主题的在线教程。