在VB.net中动态添加用户控件

4

我已经在VB.NET(Windows应用程序)中制作了一个自定义的UserControl。

如何动态地将它添加到一个窗体中?


我想指定每次程序运行时添加多少个用户控件。 - eflles
5个回答

14

UserControl本质上只是另一个类。它继承自Control,因此您可以像处理控件一样处理它,但除此之外它只是一个类。因此,要动态将用户控件添加到窗体中,您需要执行以下操作:

  1. 创建控件的新实例,例如:Dim X As New MyControl()
  2. 将控件作为子对象添加到您想要的任何容器中,例如:Me.MyGreatTabPage.Controls.Add(X)。您也可以直接将其添加到窗体中,因为窗体也是一个容器。
  3. 设置控件在容器中的位置,即设置X.LocationX.Size

请记住,每次使用New MyControl()创建的实例都是单独的MyControl。不要重复创建新控件并以某种方式将它们放置在彼此上方。只需创建并放置控件一次。将其分配给窗体的成员变量,并在需要使用它时使用此变量。


+1 提醒我不要在每次选项卡页面更改时创建控件。 - ProfK
有没有办法通过指定的字符串添加控件类型,而不是使用其构造函数创建新实例? - Areej Qadomi
如果可能性的数量有限,则可以使用“SELECT CASE”语句。否则,您需要使用所谓的“反射”。这是一个更长的故事。 - Vilx-

3

我认为你要找的是C#中的写法:this.Controls.Add(myControl)。我相信VB中也非常类似吧?


2
Form.Controls.Add(Page.LoadControl("SomeUserControl.ascx"))

接下来的难点是在每次请求时都需要重新加载,因此需要陷阱处理事件。我通常使用ViewState标志来表示它已经加载,并检查该标志是否存在以确定是否需要在OnInit中重新加载。

Dim newControl As UserControl = LoadControl("~/Controls/DRQ/Create/UCNewControl.ascx")
Me.panelHolder1.Controls.Add(newControl)

1

这是一种将两个或更多个数相加的方法:

Private _userControlList As New List(Of YourControl)

Private Sub AddingControlOnPanel()
    Dim index As Integer = _userControlList.Count + 1
    Dim userControl As New YourControl
    userControl.Location = New System.Drawing.Point(SomeLocation)
    userControl.Size = New System.Drawing.Size(SomeSize)
    userControl.Name = "userControl" + index.ToString
    userControl.Visible = False
    _userControlList.Add(userControl)
    UserControlsPanel.Controls.Add(userControl)
    userControl.Visible = True
End Sub

0
    For i As Integer = 1 To 10
        Dim tb As New TextBox
        tb.Top = 26 * i
        tb.Left = 12
        tb.Text = "text box " & i.ToString()
        tb.Parent = Me
    Next

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接