Vb.net IndexOutOfRangeException-RichText

Vb.net IndexOutOfRangeException-RichText,vb.net,richtextbox,selection,Vb.net,Richtextbox,Selection,我有一个RichTextBox txt和一个OpenFileDialog Open1。当我尝试以下操作时,在指定行上有一个IndexOutOfRangeException: Private Sub OpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenToolStripMenuItem.Click If (Open1.ShowDialog() = System.Windows.Forms.Dia

我有一个RichTextBox txt和一个OpenFileDialog Open1。当我尝试以下操作时,在指定行上有一个IndexOutOfRangeException:

Private Sub OpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenToolStripMenuItem.Click
    If (Open1.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then
        fName = Open1.FileName
        txt.LoadFile(fName, RichTextBoxStreamType.PlainText)
        Dim i As Integer = 0
        While i < txt.Lines.Length
            AnalyseLine(i)
            i = i + 1
        End While
    End If
End Sub

Private Sub AnalyseLine(ByVal line As Integer)
    Select Case txt.Lines(line).Substring(0, 1) '''' EXCEPTION ON THIS LINE ''''
        ' [...]
    End Select
End Sub

一行可能只是一个空字符串我猜的最后一行,所以检查它:

Private Sub AnalyseLine(ByVal line As Integer)
  If txt.Lines(line).Length > 0 Then
    Select Case txt.Lines(line).Substring(0, 1)
      ' [...]
    End Select
  End If
End Sub
分析线有问题。 1您不应该假设行是有效的,应该检查它是否在0范围内。。。如果在while look之外使用,它可能会失败。 2如果txt为空怎么办。它将失败。 3您确实需要检查长度,以查看其是否大于0 4为什么使用子字符串而不是数组索引[0]?您使用的方法仅获取1个字符。糟糕的编码


代码有太多问题。它不会通过同行评审。

不,它不起作用,现在它在If语句上抛出异常我让它起作用了,用txt.Text=System.IO.File.ReadAllTextfName替换了txt.LoadFilefName、RichTextBoxStreamType.PlainText,但我仍然不明白。。。
Private Sub AnalyseLine(ByVal line As Integer)
  If txt.Lines(line).Length > 0 Then
    Select Case txt.Lines(line).Substring(0, 1)
      ' [...]
    End Select
  End If
End Sub