如何将用户输入添加到数组列表

时间:2021-07-17 17:55:42

标签: vb.net winforms

程序应该从文本框中获取文本,将其组合成一个 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

1 个答案:

答案 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 事件自动在文本框中显示该客户。

您还可以扩展数据绑定以自动将客户对象绑定到文本框。你会找到很多关于这个主题的在线教程。