Member 14789896 Ответов: 1

Как добавить элемент в каждое текстовое поле в цикле


Код, который я перечислил, создает список элементов и добавляет каждый элемент в один список с именем ListBox1.

Есть ли способ сделать цикл for, чтобы поместить каждый элемент в текстовое поле? Каждый раз, когда он добавляет элемент, он будет хранить его, автоматически увеличивая номер текстового поля.

Например, если список содержит 5 элементов, программа поместит первый элемент в текстовое поле с именем Textbox1, следующий элемент в текстовое поле с именем Textbox2, следующий элемент в текстовое поле с именем Textbox3 и т. д.

Может ли кто-нибудь показать мне, как создать новое текстовое поле внутри цикла, чтобы каждый элемент был извлечен в каждое текстовое поле?

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

For Each item As Match In (New Regex(price)).Matches(source)

            ListBox1.Items.Add(item.Value)

        Next

1 Ответов

Рейтинг:
7

Maciej Los

Просто создайте новое текстовое поле внутри цикла:

Imports System.Text
Imports System.Text.RegularExpressions

Public Class Form1

    Dim myTxtBoxes As List(Of TextBox) = New List(Of TextBox)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' Input string.
        Dim sText As String = Me.TextBox1.Text
        Dim sPattern As String = Me.TextBox2.Text
        Dim initialPoint As Point = New Point(Me.TextBox2.Location.X, Me.TextBox2.Location.Y)

        ' Call Regex.Matches method.
        Dim matches As MatchCollection = Regex.Matches(sText, sPattern)

        'clear previous result
        For j As Integer = myTxtBoxes.Count - 1 To 0 Step -1
            Dim tb As TextBox = myTxtBoxes(j)
            Me.Controls.Remove(tb)
            myTxtBoxes.Remove(tb)
        Next

        ' Loop over matches and add results into textboxes
        Dim i As Integer = 1
        For Each m As Match In matches
            Dim tb As TextBox = New TextBox
            With tb
                .Name = "ResultTB" & i.ToString()
                .Location = New Point(initialPoint.X, initialPoint.Y + (i * 24) + 8)
                .Size = Me.TextBox2.Size
                .Text = m.Value
                .BackColor = Color.Aquamarine
                .Parent = Me
            End With
            myTxtBoxes.Add(tb)
            i += 1
        Next
    End Sub
End Class


[РЕДАКТИРОВАТЬ]
Скачать рабочий пример: DynamicControls_vb.7z архивов[^] (доступно для загрузки между 7 утра и 10:59 вечера CET +1)


Member 14789896

@losmac спасибо вам за ваш комментарий. Я новичок в visual basic и пытаюсь интегрировать ваш цикл текстового поля с кодом, который у меня есть, но не могу этого сделать. Не могли бы вы мне помочь? Ниже приведен код функции matches, который выводит строку "said shed spread" в поле списка. Можете ли вы интегрировать свой код в этот, чтобы он выводил "said" в Textbox1, "shed" в Textbox2 и "spread" в Textbox3?



' Входная строка.
Тусклое значение в виде строки = "сказал шед спред"

- Вызовите Регулярное Выражение.Соответствует способ.
Dim соответствует как MatchCollection = регулярное выражение.Совпадения(значение, "s\w+d")

- Петля над спичками.
Для каждого m как матч в матчах
Список listbox1.Предметы.Добавить(м. Значение)
Следующий

Maciej Los

Вы читали мой ответ? Есть прямая инструкция: "просто создайте новое текстовое поле внутри цикла". Какая часть моего ответа не ясна?
"Внутри петли" означает между For ... Next.

Ralf Meier

чтобы завершить ответ Мацея :
- Местоположение - это точка внутри вашей формы, где должно появиться текстовое поле-эта точка должна быть рассчитана вами
- SomeNumber - это номер текстового поля-внутри вашего цикла это число должно быть увеличено вами

Если ваш код действительно не работает : улучшите свой вопрос с помощью нового кода - завершенного по предложению Мацея ...

Maciej Los

Спасибо, Ральф.

Member 14789896

Спасибо вам обоим за помощь, но опять же, у меня возникли проблемы с интеграцией вашего кода. Прямо сейчас я не могу увеличить текстовые поля. Это то, что я пробовал, но вместо того, чтобы выводить три текстовых поля, он выводит одно текстовое поле в местоположении по умолчанию:


' Входная строка.
Тусклое значение в виде строки = "сказал шед спред"

- Вызовите Регулярное Выражение.Соответствует способ.
Dim соответствует как MatchCollection = регулярное выражение.Совпадения(значение, "s\w+d")

- Петля над спичками.
Для каждого m как матч в матчах

Dim tb As TextBox = новое текстовое поле()

С туберкулезом
Dim i как целое число
Для i = от 1 до 3
.Name = Строка.Concat("TextBox", i.ToString())
.Parent = Me 'эта команда помещает текстовое поле в форму!
- другие свойства

Следующий

Конец С

Следующий



Очевидно, что я пишу код не так, как нужно. И если я могу заставить его создать три текстовых поля, я все еще не знаю, как заставить каждый элемент хранить значения в textboxex; если только он не находится в списке, как мой код в вопросе.

То, что я надеюсь вывести, - это иметь три текстовых поля со строкой "said" в Textbox1, "shed" в Textbox2 и "spread" в Textbox3. Опять же, я новичок в visual basic и прошу помощи в обучении

Member 14789896

Моя ошибка, текстовое поле действительно создало три отдельных текстовых поля. Мне пришлось увеличить значения местоположения в приведенном ниже коде:


' Входная строка.
Тусклое значение в виде строки = "сказал шед спред"

- Вызовите Регулярное Выражение.Соответствует способ.
Dim соответствует как MatchCollection = регулярное выражение.Совпадения(значение, "s\w+d")

- Петля над спичками.
Для каждого m как матч в матчах

Dim tb As TextBox = новое текстовое поле()

С туберкулезом
Dim i как целое число
Дим г Как целое
Для i = от 1 до 3
y = y + 20
.Location = новая точка(12, y)
.Name = Строка.Concat("TextBox", i.ToString())
.Parent = Me 'эта команда помещает текстовое поле в форму!
- другие свойства

Следующий

Конец С

Следующий


Но есть ли код, который можно использовать для добавления каждого значения элемента в каждое текстовое поле? То, что я надеюсь вывести, - это иметь три текстовых поля со строкой "said" в Textbox1, "shed" в Textbox2 и "spread" в Textbox3.

Maciej Los

Пожалуйста, смотрите обновленное решение. Здесь вы найдете полный проект.
Удачи вам!

Member 14789896

Да, это действительно очень помогло мне! Большое вам спасибо за то, что нашли время написать код, чтобы помочь мне. Я действительно ценю это сэр

Maciej Los

Всегда пожалуйста.
Если это решит вашу проблему, пожалуйста, примите мой ответ в качестве решения (используйте зеленую кнопку).

Member 14789896

Дело сделано. Извините, что я не принял ваше решение раньше, так как я тоже новичок в этом деле. codeproject.com

Maciej Los

ОК. Тебе не нужно извиняться. Мы здесь, чтобы помочь.