图片:http://i.epvpimg.com/FTSsf.png
所以,我的私人消息应用程序的代码是这样的:
Private Sub ReplyToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReplyToolStripMenuItem.Click
Try
If Not ListBoxAdv1.SelectedItem.ToString = Nothing Then
Dim sp = ListBoxAdv1.SelectedItem.ToString()
cru = sp.Substring(0, sp.IndexOf(":"))
datee = sp.Substring(0, sp.IndexOf(")"))
datee = datee.Replace("(", "")
Dim us As String = sp.Substring(21, sp.IndexOf(":"))
Dim pmo As String = us.Substring(0, us.IndexOf(":")).Trim
Dim pm As New new_pm
pm.own = pmo
pm.Show()
End If
Catch ex As System.ArgumentOutOfRangeException
MsgBox(ex.ToString)
End Try
End Sub
问题在于第一项,它给出了错误“System.ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置。”仅当列表框包含两个以上的项目时才会使用。
答案 0 :(得分:0)
代码在这里做了很多假设:
cru = sp.Substring(0, sp.IndexOf(":"))
datee = sp.Substring(0, sp.IndexOf(")"))
Dim us As String = sp.Substring(21, sp.IndexOf(":"))
Dim pmo As String = us.Substring(0, us.IndexOf(":"))
这些字符串是否始终保证大于这些长度?并包含这些字符?例外情况说不,他们不是。
例如,如果sp
长度为0
,则没有索引0
(没有第一个字符),因此第一行代码将失败。如果长度不是至少22个字符,那么第三行将失败。如果它不包含":"
,则第一行将失败。等等。
由于您没有对字符串内容进行大量控制,因此您需要进行一些错误检查,然后使用一些业务逻辑来处理边缘情况。例如,你有这样的地方:
cru = sp.Substring(0, sp.IndexOf(":"))
您可能首先要确保sp
符合您的想法。类似的东西:
If String.IsNullOrEmpty(sp) Then
' an error condition, notify the user perhaps?
End If
和/或类似的东西:
If sp.IndexOf(":") < 0 Then
' an error condition, notify the user perhaps?
End If
在处理字符串之前,请确保它们符合代码所做的假设。如果他们不满足这些假设,那么代码就无法处理它们,必须做其他事情。 (这可能就像向用户显示消息一样简单,甚至可以默默地忽略并继续。)