VB.NET System.IndexOutOfRangeException:"索引超出了数组的边界。



大家好,知道我为什么收到这个错误消息吗?我正在使用的正常工作的原始代码。。然而,我决定给代码添加更多的值,希望它能起作用。。但我一直收到这个错误消息。并为该项目制作了一个模块。

(模块代码(

Module Structure_Units
Structure UnitsStruct
Public ValueOne As String
Public ValueTwo As String
Public ValueThree As String
Public ValueFour As String
Public ValueFive As String
Public ValueSix As String
Public Sub New(rawValue As String)
Dim Values() As String = Split(rawValue, ",")
ValueOne = Values(0)
ValueTwo = Values(1)
ValueThree = Values(2)
ValueFour = Values(3)
ValueFive = Values(4)
ValueSix = Values(5)
End Sub
End Structure
End Module

(原始代码(

Imports System
Imports System.IO
Imports System.Collections
Public Class Structures
Dim Units(3) As UnitsStruct
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
Label5.Text = Units(ListBox1.SelectedIndex).ValueOne
Label6.Text = Units(ListBox1.SelectedIndex).ValueThree
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim path As String = "C:UsersJustiDesktopSDD Major ProjectNLR.txt"
Dim reader As New System.IO.StreamReader(path)
Dim Index As Integer = -1
While Index < 3
Index += 1
Dim Current As String = reader.ReadLine
Dim fields() As String = Current.Split(";"c)
Units(Index).ValueOne = fields(0)
Units(Index).ValueTwo = fields(1)
Units(Index).ValueThree = fields(2)
ListBox1.Items.Add(Units(Index).ValueTwo)
Label1.Text = Units(Index).ValueOne
Label2.Text = Units(Index).ValueTwo
Label3.Text = Units(Index).ValueThree
End While
End Sub

(我试图重制的新代码(

Imports System
Imports System.IO
Imports System.Collections
Public Class frmLightRail
Dim Units(7) As UnitsStruct
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
Label5.Text = Units(ListBox1.SelectedIndex).ValueOne
Label6.Text = Units(ListBox1.SelectedIndex).ValueThree
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim path As String = "C:UsersJustiDesktopSDD Major ProjectNLR.txt"
Dim reader As New System.IO.StreamReader(path)
Dim Index As Integer = -1
While Index < 7
Index += 1
Dim Current As String = reader.ReadLine
Dim fields() As String = Current.Split(";"c)
Units(Index).ValueOne = fields(0)
Units(Index).ValueTwo = fields(1)
Units(Index).ValueThree = fields(2)
Units(Index).ValueFour = fields(3)
Units(Index).ValueFive = fields(4)
Units(Index).ValueSix = fields(5)
ListBox1.Items.Add(Units(Index).ValueTwo)
Label1.Text = Units(Index).ValueOne
Label2.Text = Units(Index).ValueTwo
Label3.Text = Units(Index).ValueThree
Label4.Text = Units(Index).ValueFour
Label5.Text = Units(Index).ValueFive
Label6.Text = Units(Index).ValueSix
End While
End Sub

乍一看,如果代码试图从NLR.txt输入文件中读取包含少于6个字段(用分号而非逗号分隔(的一行,则可能会出错。

代码相当混乱。我的印象是;原始的";代码也不完整。UnitsStruct是原始代码的一部分,还是您也添加/修改了该代码?为什么原始程序只从输入文件中读取三行,而您的新代码只读取七行?为什么原始代码将每一行分为三个字段,而新代码则分为六个字段?

我想你应该更详细地分析你的输入文件,并通过将其添加到你的问题中与我们分享这些信息。输入文件实际包含(或可以包含(多少行?每行实际应该拆分多少个字段?每行有固定数量的字段吗?或者每行的字段数量可以不同吗?

我将Structure设置为Class,并将字段设置为Properties。我还添加了一个.ToString方法,这样ListBox就知道要显示什么了。

我的test.txt文件如下所示。

Mary,had,a,little,lamb,it's
The,quick,brown,fox,jumped,over
Now,is,the,time,for,all
We,the,people,of,the,United

需要处理流。因此,让我们使用System.IOFile类进行简化。.ReadAllLines返回文件中的一个行数组。我们循环遍历每一行,将其传递给设置所有属性的类的构造函数。然后,新的UnitClass被添加到列表中,所有这些都用它的属性来充实。

创建一个BindingSource并将其DataSource设置为列表。CCD_ 12变为用于CCD_ 14的CCD_。相同的CCD_ 15用于每个标签。这将合成ListBox和Labels。当ListBox中的项目被选择时,适当的值出现在每个Label中。

Class UnitClass
Public Property ValueOne As String
Public Property ValueTwo As String
Public Property ValueThree As String
Public Property ValueFour As String
Public Property ValueFive As String
Public Property ValueSix As String
Public Sub New(rawValue As String)
Dim Values() As String = Split(rawValue, ",")
ValueOne = Values(0)
ValueTwo = Values(1)
ValueThree = Values(2)
ValueFour = Values(3)
ValueFive = Values(4)
ValueSix = Values(5)
End Sub
'The list box will call .ToString on the UnitClass instance to determin what to display
Public Overrides Function ToString() As String
Return ValueTwo
End Function
End Class
Private UnitBinding As BindingSource
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim lst As New List(Of UnitClass)
Dim path As String = "C:Users*****Desktoptest.txt"
Dim lines = File.ReadAllLines(path)
For Each line In lines
Dim unit As New UnitClass(line)
lst.Add(unit)
Next
UnitBinding = New BindingSource
UnitBinding.DataSource = lst
ListBox1.DataSource = UnitBinding
Label1.DataBindings.Add(New Binding("Text", UnitBinding, "ValueOne"))
Label2.DataBindings.Add(New Binding("Text", UnitBinding, "ValueTwo"))
Label3.DataBindings.Add(New Binding("Text", UnitBinding, "ValueThree"))
Label4.DataBindings.Add(New Binding("Text", UnitBinding, "ValueFour"))
Label5.DataBindings.Add(New Binding("Text", UnitBinding, "ValueFive"))
Label6.DataBindings.Add(New Binding("Text", UnitBinding, "ValueSix"))
End Sub

最新更新