Перенос элементов из одного списка в другой список

#vb.net

Вопрос:

у меня есть ListBox1, ListBox2 и текстовое поле

Я хочу, чтобы при установке значения в текстовом поле выполнялось следующее. Если значение в списке равно 1, то элементы перемещаются из текущего значения в последние элементы, а не в первые. в список 2

введите описание изображения здесь

 Dim foo As String
Dim index As Integer = 0
Dim good As Integer = 0
foo = TextBox1.Text
ListBox2.Items.Clear()

For i = 0 To ListBox1.Items.Count - 1
    If ListBox1.Items(i).ToString = foo Then
        index = i
    End If
    If i >= index Then
        ListBox2.Items.Add(ListBox1.Items(good).ToString)
    End If
Next
 

Комментарии:

1. Работает ли код? Есть ли ошибки? В чем вам нужна помощь?

2. Работает ли код? Есть ли ошибки? В чем вам нужна помощь? Код не работает

3. Я пытаюсь заставить вас улучшить свой вопрос. Есть ли ошибки? Что значит «код не работает»? good = 0 кажется, что всегда ноль. Вероятно, это не то, что вы имели в виду.

4. Научитесь использовать отладчик для пошагового выполнения кода во время его выполнения. Вы можете проверить значения во время цикла. Вы быстро увидите i >= index , что это правда каждый раз.

Ответ №1:

  1. Как отметил Ларс в комментарии, индекс равен 0 в начале, поэтому условие i >= index всегда будет истинным. Поэтому вам нужно ввести его в Int32.MaxValue действие .
  2. Вы всегда добавляете первый элемент, потому good что всегда 0. Вы должны использовать переменную цикла i :

    Список 2.Предметов.Добавить(список 1.Пункты(i).toString())


Вот версия LINQ, которая упрощает весь код, вам больше не нужно:

 ListBox2.Items.Clear()
Dim allAfter = ListBox1.Items.Cast(Of Object).SkipWhile(Function(item) Not TextBox1.Text.Equals(item))
ListBox2.Items.AddRange(allAfter.ToArray())
 

Комментарии:

1. index равно нулю, поэтому его условие If i >= index Then всегда будет верным. Не имеет значения, что в коробке.

2. @LarsTech: Ты прав. Отредактировал ответ