2008-12-17 40 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 
相關問題