如何以编程方式将控件添加到VB.NET中的窗体

我正在处理Visual Basic 2010 Express Edition中的清单。 我不知道清单所需的字段数量。 我的希望是,我可以在程序中使用for循环添加文本框/checkbox/button。 有没有办法将控件添加到窗体而不使用工具箱?

我可以通过在程序中实例化来添加控件吗?

是。

Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim MyTextbox as New Textbox With MyTextbox .Size = (100,20) .Location = (20,20) End With AddHandler MyTextbox.TextChanged, AddressOf MyTextbox_TextChanged MyForm.Controls.Add(MyTextbox) End Sub Friend Sub MyTextbox_Changed(sender as Object, e as EventArgs) 'Write code here. End Sub 
 Dim numberOfButtons As Integer Dim buttons() as Button Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Redim buttons(numberOfbuttons) for counter as integer = 0 to numberOfbuttons With buttons(counter) .Size = (10, 10) .Visible = False .Location = (55, 33 + counter*13) .Text = "Button "+(counter+1).ToString ' or some name from an array you pass from main 'any other property End With ' next End Sub 

如果你想检查哪个文本框有信息,或者单击了哪个单选button,你可以在一个OKbutton中循环遍历一个循环。

如果您希望能够单击各个数组项并让它们响应事件,请在Form_load循环中添加以下内容:

 AddHandler buttons(counter).Clicked AddressOf All_Buttons_Clicked 

然后创build

 Private Sub All_Buttons_Clicked(ByVal sender As System.Object, ByVal e As System.EventArgs) 'some code here, can check to see which checkbox was changed, which button was clicked, by number or text End Sub 

当你调用: objectYouCall.numberOfButtons = initial_value_from_main_program

 response_yes_or_no_or_other = objectYouCall.ShowDialog() 

对于单选button,文本框,相同的故事,不同的结局。

 Public Class Form1 Private boxes(5) As TextBox Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim newbox As TextBox For i As Integer = 1 To 5 'Create a new textbox and set its properties26.27. newbox = New TextBox newbox.Size = New Drawing.Size(100, 20) newbox.Location = New Point(10, 10 + 25 * (i - 1)) newbox.Name = "TextBox" & i newbox.Text = newbox.Name 'Connect it to a handler, save a reference to the array & add it to the form control. AddHandler newbox.TextChanged, AddressOf TextBox_TextChanged boxes(i) = newbox Me.Controls.Add(newbox) Next End Sub Private Sub TextBox_TextChanged(sender As System.Object, e As System.EventArgs) 'When you modify the contents of any textbox, the name of that textbox 'and its current contents will be displayed in the title bar Dim box As TextBox = DirectCast(sender, TextBox) Me.Text = box.Name & ": " & box.Text End Sub End Class 

要dynamic添加控件到窗体,执行下面的代码。 在这里,我们正在创build文本框控件来dynamic添加。

 Public Class Form1 Private m_TextBoxes() As TextBox = {} Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click ' Get the index for the new control. Dim i As Integer = m_TextBoxes.Length ' Make room. ReDim Preserve m_TextBoxes(i) ' Create and initialize the control. m_TextBoxes(i) = New TextBox With m_TextBoxes(i) .Name = "TextBox" & i.ToString() If m_TextBoxes.Length < 2 Then ' Position the first one. .SetBounds(8, 8, 100, 20) Else ' Position subsequent controls. .Left = m_TextBoxes(i - 1).Left .Top = m_TextBoxes(i - 1).Top + m_TextBoxes(i - _ 1).Height + 4 .Size = m_TextBoxes(i - 1).Size End If ' Save the control's index in the Tag property. ' (Or you can get this from the Name.) .Tag = i End With ' Give the control an event handler. AddHandler m_TextBoxes(i).TextChanged, AddressOf TextBox_TextChanged ' Add the control to the form. Me.Controls.Add(m_TextBoxes(i)) End Sub 'When you enter text in one of the TextBoxes, the TextBox_TextChanged event 'handler displays the control's name and its current text. Private Sub TextBox_TextChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) ' Display the current text. Dim txt As TextBox = DirectCast(sender, TextBox) Debug.WriteLine(txt.Name & ": [" & txt.Text & "]") End Sub End Class