如何在VB.NET中创建窗口小部件名称?

时间:2016-11-15 08:08:11

标签: vb.net

我正在制作一个音乐程序,让用户可以选择在文本框中输入数字并在容器内创建许多按钮。我希望创建的每个按钮都被命名为' 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中实现这一点?

2 个答案:

答案 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设置自动排列它们