如何在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
相关产品推荐
相关产品推荐

