#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:
- Как отметил Ларс в комментарии, индекс равен 0 в начале, поэтому условие
i >= index
всегда будет истинным. Поэтому вам нужно ввести его вInt32.MaxValue
действие . - Вы всегда добавляете первый элемент, потому
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: Ты прав. Отредактировал ответ