如何在Vb.Net中在运行时使用相同的代码创建多个用户控件

时间:2014-06-07 03:23:55

标签: vb.net

我如何使用与此类似的代码创建多个控件,我一直试图解决这个问题,但不能......

Dim newcontrol as control1 = New control1
Me.groupbox.controls.add(newcontrol)

然后添加处理程序,我想命名像Visual Studio这样的控件,newcontrol1,然后newcontrol2,3等等...我不知道我需要多少这些控件,所以它需要每当需要时添加一个新的。提前谢谢......

编辑我正在尝试在运行时执行此操作,对此感到困惑。

1 个答案:

答案 0 :(得分:1)

无法从字符串变量

创建控件引用
Dim strVar As String = "MyControl"
...
For n As Integer = 0 To 3
    Dim thisVar As String = strVar &= n.Tostring

    thisVar = New NuControl    ' already declared as String,
                               ' cant ALSO be NuControl Type!
    ...
    theForm.Controls.Add(thisVar)
 Next n

你的代码如何跟踪这些事情? strVar/thisVar是一个变量,可以更改(变化),以便您快速松开它们。编译器如何知道如何处理它? thisVar = ""会重置字符串还是销毁控件?

对于动态添加的控件,您通常需要一种方法来跟踪添加的控件,尤其是当您不知道将会有多少时。要在运行时使用相同的代码创建多个用户控件:

Dim btn As Button                     ' tmp var
Dim myBtns As New List(Of Buttons)    ' my tracker

' create 3 buttons:
For n As Integer = 0 To 3
    btn = New Button                  ' create a New button
    btn.Top = ...
    btn.Left = ...                    ' set props
    btn.Name = "Button" & n.ToString  

    AddHandler ....                   ' hook up any event handlers

    theForm.Controls.Add(btn)         ' add to form
    myBtns.Add(btn)                   ' add to my list
 Next n 

代码的关键是能够获取我们创建的控件,这是通过对象引用。要禁用我们的按钮:

 For n As Integer = 0 to myBtns.Count - 1   ' could be 3, could be 103
     myBtns(n).Enabled = False
 Next n

请注意,如果你创建的控件也可以动态删除,那么需要正确处理它们,如果你从表单中删除它们创造了它们。