首页 > 解决方案 > 索引超出范围

问题描述

我的代码不起作用,请帮助

Private Sub Form3_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        Dim lblControls() As Label = {lblName, lblID, lblGender, lblBirthDate, lblCity, lblContactNumber, lblAddress, lblHistory}
        Dim sReader As New System.IO.StreamReader(Form1.pathStorage & "Patients\" & selectedPatient & "\patientInfo.txt")
        Dim strValues(11) As String
        Dim counter As Integer = 0
        While sReader.Peek <> 1
            strValues(counter) = sReader.ReadLine
            counter += 1
        End While
        counter = 0
        For Each lbl As Label In lblControls
            lbl.Text = strValues(counter)
            counter += 1
        Next
        sReader.Close()

标签: vb.net

解决方案


我已更改为 File 类来完成您的任务。您不需要声明 File 的实例。StreamReader 不需要关闭而是处置。一个Using...End Using块或Try...Finally...End Try确保 StreamReader 的关闭和处置,以便 File 类更易于使用。

您不需要为 strValues 声明大小,因为它是在声明时初始化的。我添加了一个检查两个数组的大小是否相同。

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    Dim lblControls() As Label = {lblName, lblID, lblGender, lblBirthDate, lblCity, lblContactNumber, lblAddress, lblHistory}
    Dim path As String = pathStorage & "Patients\" & selectedPatient & "\patientInfo.txt"
    Dim strValues = File.ReadAllLines(path) 'Returns a string array
    If lblControls.Length <> strValues.Length Then
        MessageBox.Show("Labels do not equal data.")
        Return
    End If
    Dim counter As Integer = 0
    For Each lbl As Label In lblControls
        lbl.Text = strValues(counter)
        counter += 1
    Next
End Sub

推荐阅读