Поскольку TextBox добавляется в коллекцию элементов управления формы, вы можете использовать перечисляемый метод OfType , чтобы получить все элементы управления TextBox. Более того, я бы, вероятно, назначил Tag сгенерированного TextBox желаемому имени поля, чтобы вы могли запросить коллекцию элементов управления для первого экземпляра TextBox, чей тег равен требуемому полю.
Также стоит упомянуть, что вы можете использовать ключевое слово With, чтобы избавиться от ненужного кода.
С учетом всего вышесказанного, ваш метод AddNewTextBox будет выглядеть следующим образом:
Public Function AddNewTextBox(ByVal fieldName As String) As System.Windows.Forms.TextBox
Dim txt As New System.Windows.Forms.TextBox()
Me.Controls.Add(txt)
With
.Top = cLeft * 30
.Left = 100
'.Text = "TextBox " & Me.cLeft.ToString
cLeft = cLeft + 1
.ForeColor = Color.DarkGreen
.BackColor = Color.Gray
.Font = New Font("Arial", 14.0, FontStyle.Regular)
.Size = New Size(237, 31)
.Location = New Point(156, 130 + top1)
.Tag = fieldName
End With
Return txt
End Function
Событие нажатия вашей кнопки будет выглядеть так:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'call the function
Dim txt As TextBox = AddNewTextBox("username")
End Sub
И ваш параметризованный запрос будет выглядеть так:
Dim usernameTextBox As TextBox = Me.Controls.OfType(Of TextBox).FirstOrDefault(Function(txt) txt.Tag IsNot Nothing AndAlso txt.Tag = "username")
If usernameTextBox IsNot Nothing Then
cmd.Parameters.AddWithValue("@username", usernameTextBox.Text)
End If