You need to enable JavaScript to run this app. 如何在VB.NET中将用户输入添加到ArrayList并显示在ListBox中
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET中将用户输入添加到ArrayList并显示在ListBox中

问题解决说明

你代码里的错误主要来自BtnAdd_Click方法的逻辑错误,以及一处隐藏的对象未实例化问题,修正方案如下:

核心错误点

  • ListBox控件添加项的正确方法是Items.Add(),你直接调用lstCustomer.Add()属于方法名拼写错误
  • 你使用And拼接多个文本框内容的逻辑不符合需求:你需要将四个输入分别传入已封装好的NewCustomer方法创建对象,而非直接拼接字符串添加到ListBox
  • 隐藏问题:你在NewCustomer方法中声明Dim temp As Customer后没有实例化对象,直接赋值属性会触发空引用错误
  • 类型适配问题:Age是整数类型,需要将文本框的字符串输入转换为Integer,建议增加输入校验避免报错

修正后的完整代码

Public Class Form1
    ' 建议替换ArrayList为类型安全的List(Of Customer),避免后期类型转换错误
    Private myCustomers As New List(Of Customer)

    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)
        ' 新增New实例化Customer对象
        Dim temp As New 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.ToString() ' 整数转字符串显示
        Me.TxtEmail.Text = temp.Email
    End Sub

    Private Sub BtnAdd_Click(sender As Object, e As EventArgs) Handles BtnAdd.Click
        ' 先校验年龄输入是否为合法数字
        Dim age As Integer
        If Not Integer.TryParse(TxtAge.Text, age) Then
            MessageBox.Show("请输入合法的年龄数字")
            Return
        End If
        ' 调用NewCustomer方法创建对象并添加到列表,完全复用已有的封装逻辑
        NewCustomer(TxtFirstName.Text, TxtLastName.Text, age, TxtEmail.Text)
    End Sub
End Class

额外补充说明

如果希望ListBox中显示客户的可读名称,你可以在Customer类中重写ToString()方法,示例如下:

Public Class Customer
    Public Property FirstName As String
    Public Property LastName As String
    Public Property Age As Integer
    Public Property Email As String
    Public Property name As String

    ' 重写ToString方法,控制ListBox中显示的内容
    Public Overrides Function ToString() As String
        Return $"{FirstName} {LastName} ({Age})"
    End Function
End Class

内容的提问来源于stack exchange,提问作者Edward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:33:04