IndexOutOfRangeException - RichText

时间:2014-02-24 21:50:39

标签: 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.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 txt_TextChanged(sender As Object, e As EventArgs) Handles txt.TextChanged
    AnalyseLine(txt.GetLineFromCharIndex(txt.GetFirstCharIndexOfCurrentLine))
End Sub

2 个答案:

答案 0 :(得分:2)

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

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)

AnalyseLine存在问题。 1)你不应该假设线路是有效的,并且应该检查它是否在0范围内......如果它在外面使用它看起来可能会失败。 2)如果txt为null怎么办?它会失败。 3)你需要检查长度以确定它是&gt; 0 4)为什么使用substring而不是数组索引[0]?您正在使用方法只获得1个字符。编码不好。

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