faiqaa Ответов: 1

Как выбрать строку данных в listbox, разделить ее и отобразить в пронумерованных текстовых полях (txtbox1, txtbox2..?


Я должен иметь возможность изменять данные, отображаемые в списке, поэтому я планировал,что при выборе каждой строки данных эта строка данных будет разделена и скопирована в текстовые поля (txtBox1, txtBox2 и так далее)
Я использовал для этого приведенный ниже код, сначала он выполнял свою работу, однако в последнее время постоянно появляется ошибка "индекс находился за пределами массива", и на последнюю строку кода указывают. Дайте мне знать, если кто-нибудь сможет помочь, спасибо.

Что я уже пробовал:

Dim array(5) As String
     Dim strRecord As String = ("")
     strRecord = ListBox1.SelectedItem
     array = strRecord.Split(",")
     For N As Integer = 1 To 5
         Dim txtBoxN As TextBox = Me.Controls.Find("txtBox" & N, True).FirstOrDefault
         If Not IsNothing(txtBoxN) Then
             txtBoxN.Text = array(N - 1)


         End If
     Next

1 Ответов

Рейтинг:
11

Maciej Los

Если вы хотите разделить элемент списка на части, используйте ListBox.SelectedIndexChanged Event (System.Окна.Формы)[^]
Затем внутри этого события вставьте следующий код:

Dim curItem As String = ListBox1.SelectedItem.ToString()
Dim parts As String() = curItem.Split(New String(){","}, StringSplitOptions.RemoveEmptyEntries)

For i As Integer = 0 To parts.Count()-1
    Dim txt As TextBox = DirectCast(Me.Controls("txtBox" & i+1), System.Windows.Forms.TextBox)
    txt.Text = parts(i)
Next


У тебя есть "Index was outside the bounds of the array", потому что ваш цикл for-next начинается с единицы и превышает количество элементов в массиве. См. важное примечание от MSDN:
Цитата:
Индексы массива варьируются от 0 до единицы, что меньше общего числа элементов в массиве.


Больше:
Оператор DirectCast (Visual Basic) | Microsoft Docs[^]
Массивы в Visual Basic | Microsoft Docs[^]