我有'mscorlib.dll'异常中出现'System.ArgumentOutOfRangeException'类型的第一次机会异常,它正在影响我的程序。这是我的代码。下面是我对代码的文字摘要。
Private Sub Group_LeaderTextBox_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Group_LeaderTextBox.LostFocus
Dim ListCounter As Integer
Dim Checker As Integer = 0
Dim NewString As String
If Group_LeaderTextBox.Text <> "" Then
If ListBox_ParticipantsNames.Items.Count = 0 Then
ListBox_ParticipantsNames.Items.Add(Group_LeaderTextBox.Text & " (Group Leader)")
Else
For ListCounter = 0 To ListBox_ParticipantsNames.Items.Count - 1
If ListBox_ParticipantsNames.Items.Item(ListCounter).ToString.Substring(0) = Group_LeaderTextBox.Text Then
If ListBox_ParticipantsNames.Items.Item(0).ToString.Substring(ListBox_ParticipantsNames.Items.Item(0).ToString.Length - 14) = "(Group Leader)" Then
NewString = ListBox_ParticipantsNames.Items.Item(0).ToString.Replace(" (Group Leader)", "")
ListBox_ParticipantsNames.Items.RemoveAt(0)
ListBox_ParticipantsNames.Items.Insert(0, NewString)
End If
ListBox_ParticipantsNames.Items.RemoveAt(ListCounter)
ListBox_ParticipantsNames.Items.Insert(0, Group_LeaderTextBox.Text & " (Group Leader)")
Exit For
Else
Checker += 1
End If
Next
If Checker = ListBox_ParticipantsNames.Items.Count Then
If ListBox_ParticipantsNames.Items.Item(0).ToString.Substring(ListBox_ParticipantsNames.Items.Item(0).ToString.Length - 14) = "(Group Leader)" Then
ListBox_ParticipantsNames.Items.RemoveAt(0)
ListBox_ParticipantsNames.Items.Insert(0, Group_LeaderTextBox.Text & " (Group Leader)")
Else
ListBox_ParticipantsNames.Items.Insert(0, Group_LeaderTextBox.Text & " (Group Leader)")
End If
End If
End If
Else
If ListBox_ParticipantsNames.Items.Item(0).ToString.Substring(ListBox_ParticipantsNames.Items.Item(0).ToString.Length - 14) = "(Group Leader)" Then
ListBox_ParticipantsNames.Items.RemoveAt(0)
End If
End If
End Sub
因此,当文本框'Group_LeaderTextBox'(让我们称之为'X')失去焦点时,此代码用于向列表框添加值。
逻辑是这样的(按照编写的代码的顺序):
但首先,一些先决条件:
逻辑:
假设我在X中输入了“John”。在焦点丢失时,如果列表框为空,则“John(Group Leader)”将被简单地添加到列表框中。否则,如果例如我已经通过Y在列表框中添加了一些项目,程序将检查列表框中是否已经存在“John”。如果存在,并且列表中已经没有组长,则项目“John”将被替换为添加到列表顶部的“John(Group Leader)”(这不起作用)。如果已经有一个小组组长,“John(小组组长)”仍然会出现在最高层,但之前的小组组长将被降级。因此,如果之前的“Dick”:P是前一个小组组长,那么字符串“(小组组长)”将从“Dick(小组组长)”中删除。
现在,如果在检查整个列表后,没有与“John”匹配的项目,那么程序将像以前一样检查是否已经有一个组长。如果有,那么之前的组长只会被“John(组长)”所取代。如果没有任何组长,那么“John(组长)”将被简单地添加到列表的顶部(这也不行)。
问题1(情景)
X:约翰
列表:
约翰
瑞奇
简
OR(无论列表的顺序如何)
列表:
瑞奇
约翰
简
在X失去焦点时,项目“John”应该被移除并替换为“John(Group Leader)”添加到列表顶部,但什么也没发生。
问题2(情景)
X:约翰
列表:
瑞奇
简
在X失去焦点时,“John(组长)”应该被添加到列表的顶部,但一切都没有发生。
因此,每当我遇到这些问题时,异常就会出现在我的即时窗口中。谁能帮我?谢谢。
答案 0 :(得分:1)
由于您只提供了一小段代码片段,因此很难诊断您所有程序的逻辑,但是对于您获得的错误,您是否有可能拥有参与者名称哪个少于14个字符?看看这一行:
If ListBox_ParticipantsNames.Items.Item(0).ToString.Substring(ListBox_ParticipantsNames.Items.Item(0).ToString.Length - 14) = "(Group Leader)" Then
如果您的第一个参与者的姓名没有以#34;(组长)和#34;结束,您可能会遇到鸡和蛋的问题。然后你添加它,但如果它没有结束&#34;(组长)&#34;然后你得到一个错误。如果ListBox_ParticipantsNames.Items.Item(0).ToString.Length
小于14,那么您将得到一个负数,这将导致索引超出范围异常。
参见文档:
http://msdn.microsoft.com/en-us/library/hxthx5h6(v=vs.100).aspx
ArgumentOutOfRangeException:startIndex小于零或大于此实例的长度。
执行以下操作可能更容易:
Dim l_participantName As String = ListBox_ParticipantsNames.Items.Item(0).ToString()
l_participantName = l_participantName.PadLeft(14) ' Guarantees the length of the string is at least 14 characters
If l_participantName.Substring(l_participantName.Length - 14) = "(Group Leader)" Then
更容易:
If ListBox_ParticipantsNames.Items.Item(0).ToString.EndsWith("(Group Leader)") Then