Рейтинг:
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
ОК. Тебе не нужно извиняться. Мы здесь, чтобы помочь.