2013-03-29 5 views
2

У меня есть «Первое исключение исключения типа« System.ArgumentOutOfRangeException »произошло в исключении mscorlib.dll ', и это влияет на мою программу. Вот мой код. Ниже это мое текстовое резюме кодов.Что означает System.ArgumentOutOfRangeException? (vb.net)

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») потерял фокус.

Логика это (в порядке кодов, написанных):

Но во-первых, некоторые предпосылки:

  • Есть 2 способа добавления элементов в списке, один находится через X (на нем теряется фокус), а второй - через другое текстовое поле (назовем его «Y»). (Не важно)
  • Весь текст из X, добавленный в список, появляется сначала в списке, независимо от того, что уже присутствует в списке.
  • Текст из X, скажем, «Джон», если он добавлен в список, появится с добавленной строкой «(Лидер группы)». Итак, потеряв фокус, «Джон» появится как «Джон (руководитель группы)». Помните, что может быть и вход от Y, однако вход Y - это просто текст, который он содержит.
  • Если (при потере фокуса) X пуст, то если первый элемент в списке содержит подстроку «(Руководитель группы)», она будет удалена. Итак, если «Джон» удален из X, «John (Group Leader)» будет удален. И если нет лидера группы, ничего не произойдет.

Логика:

Предположим, я вошел «Джон» в X. В фокусе утерянных, если окно список пуст, «Джон (руководитель группы)» будут просто добавлены в список. Иначе, если, например, Я уже добавил некоторые элементы в окно списка через Y, программа проверит, есть ли в списке список «Джон». Если есть, и в списке нет лидера группы, элемент «Джон» будет заменен на «John (Group Leader)», который добавлен в верхнюю часть списка (это не работает). И если уже есть лидер группы, «Джон (руководитель группы)» все еще появится наверху, но предыдущий лидер группы будет понижен в должности. Итак, если ранее «Дик»: P был предыдущим лидером группы, строка «(Лидер группы)» будет удалена из «Dick (Leader группы)».

Теперь, если после проверки всего списка нет элемента, соответствующего «Джону», программа, как и раньше, будет проверять, есть ли лидер группы. Если есть, то предыдущий лидер группы просто будет заменен на «John (Group Leader)». И если бы не было ни одного лидера группы, тогда «Джон (Лидер группы)» просто добавляется в верхнюю часть списка (это тоже не работает).

Задача 1 (сценарий)

X: John

Список:
Джон
Рики
Джейн

ИЛИ (независимо от того, из списка)

Список:
Рики
Джон
Джейн

На X теряет фокус, пункт «Джон» должен был быть удален и заменен на «Джон (лидер группы)» достроил в верхней части списка, но вообще ничего не происходит.

Задача 2 (сценарий)

X: John

Список:
Рики
Джейн

На X проигравшего фокуса, "Джон (руководитель группы)" должен был добавлен в верхней части списка, но ничего не происходит.

Итак, всякий раз, когда у меня возникают эти проблемы, исключение появляется в моем ближайшем окне. Может кто-нибудь мне помочь? Спасибо.

ответ

1

Трудно диагностировать всю логику вашей программы, поскольку вы предоставили только небольшой фрагмент кода, но что касается ошибки, которую вы получаете, возможно ли, что у вас есть имя участника менее 14 символов? Глядя на эту линию:

If ListBox_ParticipantsNames.Items.Item(0).ToString.Substring(ListBox_ParticipantsNames.Items.Item(0).ToString.Length - 14) = "(Group Leader)" Then 

Вы можете иметь проблему курицы и яйца, где, если имя вашего первого участника не заканчивается «(руководитель группы)», а затем добавить его, но если он не заканчивается " (Лидер группы) ", то вы получите сообщение об ошибке. Если 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 
+0

Это сработало! Спасибо Cyborgx37. –

Смежные вопросы