我正在處理Visual Basic 2010 Express Edition的庫存。我不知道清單所需的字段數量。我的希望是,我可以在程序中使用for循環添加文本框/複選框/按鈕。有沒有辦法在不使用工具箱的情況下將控件添加到表單中?如何以編程方式將控件添加到VB.NET中的表單
我可以通過在程序中實例化來添加控件嗎?
我正在處理Visual Basic 2010 Express Edition的庫存。我不知道清單所需的字段數量。我的希望是,我可以在程序中使用for循環添加文本框/複選框/按鈕。有沒有辦法在不使用工具箱的情況下將控件添加到表單中?如何以編程方式將控件添加到VB.NET中的表單
我可以通過在程序中實例化來添加控件嗎?
是的。
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
如果您要檢查該文本框有信息,或單選按鈕被點擊,就可以在一個確定按鈕,通過一個循環迭代。
如果你希望能夠點擊單個陣列的項目,讓他們響應事件,添加在Form_Load循環以下幾點:
AddHandler buttons(counter).Clicked AddressOf All_Buttons_Clicked
然後創建
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()
對於單選按鈕,文本框,相同的故事,不同恩結束。
要將控件動態添加到窗體,請執行以下代碼。我們在這裏創建文本框控件來動態添加。
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
注意其他答案是如何解釋他們的代碼的? –
如果表單允許,我會將這些添加到'FlowLayoutPanel'或動態添加單元到'DataGridView'。這樣就不需要設置邊界或確切位置。很好的例子。 – Rachael
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
請添加一些解釋。 –
嗨,Holger,我可以在面板上添加這個嗎? –
是的,你可以。每個控件都有一個Controls屬性,您可以從中添加(或刪除)控件。只要記得手動添加你想要實現的處理程序。對於您的面板,將上例中的「MyForm」替換爲面板名稱。 –