Динамически добавить пользовательский контроль в VB.net - PullRequest
4 голосов
/ 17 декабря 2008

Я сделал пользовательский UserControl i Vb.net (приложение для Windows).

Как я могу динамически добавить это в форму?

Ответы [ 5 ]

12 голосов
/ 17 декабря 2008

UserControl - это просто другой класс. Он наследуется от Control, поэтому вы можете делать все, что вы делаете с элементами управления, но в остальном это просто класс. Таким образом, чтобы динамически добавить пользовательский контроль в вашу форму, вы должны сделать следующее:

  1. Создайте новый экземпляр вашего элемента управления. Нравится Dim X As New MyControl()
  2. Добавьте элемент управления в форму как дочерний объект в любой контейнер, который вам нужен. Как Me.MyGreatTabPage.Controls.Add(X). Вы также можете добавить его непосредственно в форму, потому что форма также является контейнером.
  3. Установите положение элементов управления в контейнере. Это будет установка X.Location и X.Size.

Помните, что каждый экземпляр, который вы создаете с помощью New MyControl(), будет отдельным MyControl. Не совершайте ошибку, создавая новые элементы управления и размещая их друг над другом каким-либо образом. Создайте и разместите элемент управления один раз. Присвойте его переменной-члену вашей формы, и, когда вам нужно с ней работать, используйте эту переменную.

3 голосов
/ 17 декабря 2008

Я думаю, что вы ищете написано как: this.Controls.Add (myControl) в C #. Я уверен, что это очень похоже на VB тоже?

2 голосов
/ 17 декабря 2008
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 голосов
/ 18 сентября 2012

Это метод для добавления двух или более:

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 голосов
/ 17 декабря 2008
    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
...