我有一个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
答案 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个字符。编码不好。
代码有太多问题。它不会通过同行评审。