Что мне нужно сделать, так это ввести 10 раз из текстового поля, сохранить его в массиве, а затем отобразить массив в поле со списком.
Я придумал этот цикл for, но он не работает, все, что он делает, это отображает первый ввод, а остальные просто пусты:
For i As Integer = 0 To 9
ArrNames(i) = txtUserInput.Text
txtUserInput.Clear()
Next i
и у меня есть другая кнопка для отображения массива, и я использовал это:
lstDisplay.DataSource = ArrNames
Может кто-нибудь мне помочь? Я смотрел везде, и ничего не работало для меня
Редактировать 1:
Поэтому я сильно изменил его и придумал следующее:
Dim I As Integer
If sender Is btnEnter Then
I = I + 1
End If
ArrNames(I) = txtUserInput.Text
txtUserInput.Clear()
что он делает, так это то, что если кнопка нажата, она увеличивает I на единицу, что делает так, чтобы ввод шел по правому индексу, верно?
но теперь, когда я это делаю, он вообще перестал что-либо отображать, так что это:
Private Sub btnShow_Click(sender As Object, e As EventArgs) Handles btnShow.Click
lstDisplay.DataSource = ArrNames
перестал работать
txtUserInput.Clear() очищает ввод текста в цикле после первого. Его нужно переместить за пределы цикла, после Next i...
Сначала я бы порекомендовал вам использовать типизированные списки вместо использования старомодного массива (входящие обсуждения... но...).
Вы также можете использовать замечательную функцию Enumerable.Range().
У меня сейчас нет редактора, но это должно выглядеть так:
Dim list = new List(Of string)
For i In Enumerable.Range(1, 10)
list.Add(txtUserInput.Text)
Next
txtUserInput.Clear()
lstDisplay.DataSource = list
Если вы планируете впоследствии изменить свой список и, например, сохраните его в области класса, тогда вы должны использовать BindingList (Of String), который поддерживает уведомление об изменениях.
Редактировать 1:
Вы вызываете txtUserInput.Clear()
внутри цикла после того, как ваш ввод был получен из текстового поля в первый раз. Это означает, что в каждой следующей итерации текстовое поле очищается.
Спасибо за ваш ответ, я бы хотел использовать списки, это сделало бы все намного проще, но, к сожалению, это задание было дано мне моим учителем CS, поэтому я вынужден использовать массивы):
For i In Enumerable.Range(1, 10)
Я получаю ошибку в этой строке.
Похоже, вы пытаетесь добавить содержимое текстового поля 10 раз. Зачем повторять один и тот же контент 10 раз?
Будем надеяться, что переменная I
объявлена на уровне класса в том же месте, что и массив.
Чтобы принудительно обновить ListBox, вы должны установить .DataSource
на Nothing
, а затем снова вернуться к своему массиву:
Public Class Form1
Private I As Integer
Private ArrNames(9) As String
Private Sub btnAddName_Click(sender As Object, e As EventArgs) Handles btnAddName.Click
If I < ArrNames.Length Then
If txtUserInput.Text.Trim.Length > 0 Then
ArrNames(I) = txtUserInput.Text
I = I + 1
lstDisplay.DataSource = Nothing
lstDisplay.DataSource = ArrNames
txtUserInput.Clear()
txtUserInput.Focus()
Else
MessageBox.Show("Enter a name first!")
End If
Else
MessageBox.Show("The array is full!")
End If
End Sub
End Class
Мы не ставим "решено" в вопросы здесь.