2008-12-17 108 views
4

我做了一个自定义的UserControl i Vb.net(windows应用程序)。在VB.net中动态添加一个usercontrol

如何将此动态添加到表单中?

+0

定义“动态”。 – xsl 2008-12-17 09:37:38

+0

我想指定每次运行程序时将添加多少个用户界面。 – eflles 2008-12-17 09:53:38

回答

12

UserControl本质上只是另一个类。它继承自Control,所以你可以用控件做各种事情,但除此之外,它只是一个类。因此,要将usercontrol动态添加到表单中,请执行以下操作:

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

请记住,您使用New MyControl()创建的每个实例都将是一个单独的MyControl。不要错误地重复创建新控件并以某种方式将它们放在彼此之上。创建并放置一次控件。将它分配给一个成员变量给你的表单,当你需要使用它时,使用这个变量。

+0

+1提醒我不要在每次标签页更改时都创建控件。 – ProfK 2012-09-21 06:23:59

3

我认为你要找的是写成:this.Controls.Add(myControl)在C#中。我相信它在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) 
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 
0

这是添加两种以上的方法:

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