You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET添加电影项触发索引超出范围错误的问题排查

问题原因与解决方案

错误原因

你定义数组时,i初始值是0,所以Flm(i) As Film创建的是长度为1的数组(仅能访问索引0的元素)。第一次点击按钮时,i=0,赋值后i变为1;第二次点击时,代码尝试访问Flm(1),但数组没有这个索引,直接触发“索引超出矩阵限制”的错误——普通数组的长度是固定的,无法动态扩容。

修复方案

既然电影数量不固定,推荐使用**List(Of Film)动态集合**代替数组,它可以自动扩容,完美适配需求。

修改模块代码

Module Module1
    Public Structure Film
        Public Titolo As String
        Public Autore As String
        Public Incasso As Integer
        Public Nazionalita As String
    End Structure

    ' 用动态List替代固定长度数组
    Public filmList As New List(Of Film)()
End Module

修改输入按钮代码

Public Class frmInput
    Private Sub btnInserisci_Click(sender As Object, e As EventArgs) Handles btnInserisci.Click
        Dim incasso As Integer
        ' 用更严谨的TryParse判断数值,替代IsNumeric
        If Not Integer.TryParse(txtIncasso.Text, incasso) Then
            MsgBox("票房必须是数值类型", MsgBoxStyle.Exclamation, "注意")
        ElseIf String.IsNullOrEmpty(txtTitolo.Text) Or String.IsNullOrEmpty(txtAutore.Text) Or String.IsNullOrEmpty(txtNazionalita.Text) Then
            MsgBox("存在空值,请填写完整", MsgBoxStyle.Exclamation, "注意")
        Else
            ' 创建新的电影实例并添加到列表
            Dim newFilm As Film
            newFilm.Titolo = txtTitolo.Text
            newFilm.Autore = txtAutore.Text
            newFilm.Incasso = incasso
            newFilm.Nazionalita = txtNazionalita.Text
            filmList.Add(newFilm)
            
            ' 可选:清空输入框,方便后续输入
            txtTitolo.Clear()
            txtAutore.Clear()
            txtIncasso.Clear()
            txtNazionalita.Clear()
        End If
    End Sub
End Class

额外说明

  1. List(Of T)是VB.NET中专门处理动态元素数量的集合,调用Add方法即可自动扩容,无需手动管理数组长度。
  2. 原代码用IsNumeric判断数值不够严谨,Integer.TryParse会直接尝试转换并返回结果,避免非整数数值(比如小数)被误判的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:18:19