.net 从动态创建的文本框和复选框中获取值

.net 从动态创建的文本框和复选框中获取值,.net,asp.net,vb.net,.net,Asp.net,Vb.net,我编写以下代码来创建代码 Dim i, x, y As Integer x = 30 y = 25 i = 0 For i = 0 To dt1.Rows.Count - 1 Dim chk As New CheckBox() chk.Text = dt1.Rows(i)(0) chk.Location = New Point(x, y) chk.Font = fnt chk.Widt

我编写以下代码来创建代码

Dim i, x, y As Integer
    x = 30
    y = 25
    i = 0
    For i = 0 To dt1.Rows.Count - 1
        Dim chk As New CheckBox()
        chk.Text = dt1.Rows(i)(0)
        chk.Location = New Point(x, y)
        chk.Font = fnt
        chk.Width = 450
        chk.ForeColor = Color.White

        Me.Panel1.Controls.Add(chk)
        chk.Name = "chk" & Convert.ToString(i)
        Dim txt As New TextBox
        txt.Location = New Point(x, y + 23)
        txt.Font = fnt
        txt.Multiline = True
        txt.Height = 46
        txt.Width = 400
        Me.Panel1.Controls.Add(txt)
        txt.Name = "txt" & Convert.ToString(i)
        y = y + 69
我想在buttonclick事件中检索checkbox的textvalue(其checked属性为true)和相应的textbox。问题在于查找控件及其文本值。
有人可以帮忙吗?提前谢谢。dt1是datatable。对于窗口窗体应用程序,该代码在生命周期中的位置是?它应该在页面加载之前,以便稍后获得控件值。你可以给它一个像

 chk.ID = myId;
要获得值,您可以编写如下内容

 CheckBox cb  =(CheckBox)Page.FindControl(myId);

你有没有试过在控件之间循环?如下所示:

    Dim ctrlName As String = String.Empty
    For Each ctrl As Control In Me.Controls
        If TypeOf ctrl Is CheckBox Then
            Dim chk As CheckBox = CType(ctrl, CheckBox)

            If chk.Checked Then
                ctrlName = chk.Name.Replace("chk", "txt")
            End If
        ElseIf TypeOf ctrl Is TextBox AndAlso ctrl.Name = ctrlName Then
            Dim txt As TextBox = CType(ctrl, TextBox)
            Dim val As String = txt.Text
            ctrlName = String.Empty
        End If
    Next
我没有测试这个,只是一个想法。

别忘了你必须这么做

您的
页面
只是一个类,每个请求实例化一次,如果它不重新创建这些控件以及回发请求上的关联处理程序,那么您将不会得到任何结果


您需要在
Page\u Load
之前重新创建这些控件,您可以在
Page\u Init
中执行此操作,或覆盖
CreateChildControls
方法。

创建一个新的VB Windows窗体应用程序并添加一个按钮,然后用此代码替换窗体的代码:

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim txt As New TextBox
        txt.Name = "myText"
        txt.Left = Me.Width / 2
        txt.Top = Me.Height / 2
        txt.Text = "here is my text"

        Me.Controls.Add(txt)              'This will add the dynamically created object

        Dim anotherObj As TextBox = Me.Controls.Item("myText")    'because we know the name of the object we created before, we can retreive it back

        MsgBox(anotherObj.Text)      'and we can also get the text we assigned earlier.


    End Sub


End Class

最后两行可以放在另一个子函数()中,您仍然可以得到相同的结果。

这是针对窗口窗体应用程序的,我们将名称分配给控件,并在我的代码chk.name=“chk”&Convert.ToString(i)中分配,所以页面无法工作。对不起,我以为是webforms。
    Dim txtbranchname1 As TextBox
    Private boxes(1) As TextBox

    newbox = New TextBox
    newbox.Size = New Drawing.Size(100, 20)
    newbox.Name = "txtBranchName"
    newbox.TabIndex = 1
    newbox.Dock = DockStyle.Fill
    AddHandler newbox.TextChanged, AddressOf TextBox_TextChanged
    AddHandler newbox.KeyDown, AddressOf TextBox_Keydown
    Me.TableLayoutPanel1.Controls.Add(newbox)
    txtbranchname1 = Me.TableLayoutPanel1.Controls.Item("txtBranchName")

    'Enter the value to textbox on runtime
    MsgBox( txtbranchname1.Text)

    'assign value to textbox
    txtbranchname1.Text = "Something"