我正在制作一个音乐程序,让用户可以选择在文本框中输入数字并在容器内创建许多按钮。我希望创建的每个按钮都被命名为' btn'后跟循环中生成的数字。以下是我到目前为止的代码:
Private Sub txtNum_TextChanged(sender As Object, e As EventArgs) Handles txtNum.TextChanged
For i As Integer = 1 To CInt(txtNum)
Dim strName as String = "btn" & i.ToString()
Dim <strName> as New Button
Next
End Sub
我知道我的代码中创建按钮的行不起作用。我怎样才能做到这一点?有没有其他方法可以在VB.NET中实现这一点?
答案 0 :(得分:0)
您必须将该按钮添加到表单的控件,并创建一个事件处理程序
> Private Sub txtNum_TextChanged(sender As Object, e As EventArgs)
> Handles txtNum.TextChanged
> For i As Integer = 1 To CInt(txtNum)
> Dim strName as String = "btn" & i.ToString()
> Dim btn as New button
> With btn
> .Size = (100,20)
> .Location = (20,20)
> End With
> AddHandler btn.Clicked, AddressOf btn_Clicked
> MyForm.Controls.Add(btn )
> Next
> End Sub
答案 1 :(得分:0)
您应该设置按钮的Name属性,但我认为您应该避免使用TextChanged事件来执行此操作。每次在文本框中键入单个字符时都会调用此处理程序(当用户输入错误的内容并取消其输入以修复错误时)也会调用此处理程序,因此最好在单击事件处理任务时创建一个“创建”按钮
Private Sub bntCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click
For i As Integer = 1 To CInt(txtNum.Text)
Dim strName as String = "btn" & i.ToString()
Dim btn as New Button
btn.Name = strName
' Now calculate the Location property to place your button
btn.Location = new Point(0, i * 20)
' Set the button click handler (same handler for all buttons)
AddHandler btn.Click, AddressOf onClick
' And finally add it to the form controls collection.
Me.Controls.Add(btn)
Next
End Sub
Sub onClick(ByVal sender as Object, ByVal args as EventArgs)
Dim btn = DirectCast(sender, Button)
if btn.Name = "btn1" Then
' Code for btn1
else if btn.Name = "btn2" Then
.....
End If
End Sub
棘手的部分是如何在表单上定位按钮。在上面的示例中,按钮是垂直排列的位置,其顶部位置之间有20个像素的间隔,但这会导致其他问题(按钮可以放在表单边框之外)。如果允许的按钮数量很高,那么您应该尝试使用FlowLayoutPanel根据FlowLayout设置自动排列它们