2010-03-20 174 views
2

我需要动态创建文本框。 这是我的代码,但这个我只能创建一个文本框:动态创建文本框

Public Sub CreateTextBox() 
     Dim I As Integer 
     Dim niz As Array 
     For I = 1 To 5 
      Dim myTextBox = New TextBox 
      myTextBox.Text = "Control Number:" & I 
      Me.Controls.Add(myTextBox) 
     Next 

    End Sub 

因此,如何我可以动态创建文本框?

谢谢!

+8

你确定它们不仅仅是彼此之上吗? – 2010-03-20 16:30:07

+0

'niz'用于什么?一个声明'As Array'在VB中几乎肯定是一个错误。 – 2010-03-20 16:33:43

+1

@Chris:让你的评论成为答案,你应该享有声誉,并且问题可以被标记为完成/回答。 – 2010-03-20 16:39:27

回答

2

此代码实际上创建了TextBox的5个实例并将它们添加到当前表单中。问题在于你将它们叠加在一起。您需要使用布局机制来正确显示它们。

例如,此代码将以自顶向下的方式将它们添加到FlowLayoutPanel

Public Sub CreateTextBox() 
    Dim I As Integer 
    Dim panel as New FlowLayoutPanel() 
    panel.FlowDirection = FlowDirection.TopDown 
    For I = 1 To 5 
    Dim myTextBox = New TextBox 
    myTextBox.Text = "Control Number:" & I 
    panel.Controls.Add(myTextBox) 
    Next 
    Me.Controls.Add(panel) 

End Sub 
0

您需要将控件的ID属性设置为每个控件都是唯一的。还要记住,使用动态创建的控件,您必须在每个页面帖子中重新创建它们,以便能够从控件集合中检索任何信息。

+1

我认为OP是在谈论WinForms,而不是WebForms。 – 2010-03-20 16:40:41

2

克里斯是对的。您没有设置位置,因此控件使用每个位置的默认位置。它们堆叠在一起。

您可能还想创建一个单独的收集文本框,以便您可以从Forms.Controls集合中单独访问它们。

此外,您可能希望使用.Tag属性以某种方式识别创建的控件。