Динамически создать текстовое поле

2

Мне нужно динамически создавать текстовые поля. Это мой код, но с этим я создаю только одно текстовое поле:

 Public Sub CreateTextBox()
        Dim I As Integer
        Dim niz As Array
        For I = 1 To 5
           Dim myTextBox = New TextBox
           myTextBox.Text = "Control Number:" & I
            Me.Controls.Add(myTextBox)
        Next

    End Sub

Итак, как я могу динамически создавать текстовые поля?

Спасибо!

  • 8
    Вы уверены, что они не просто все друг на друге?
  • 0
    Для чего используется niz ? Объявление As Array почти наверняка является ошибкой в VB.
Показать ещё 2 комментария
Теги:

3 ответа

2
Лучший ответ

Этот код фактически создает 5 экземпляров TextBox и добавляет их в текущую форму. Проблема в том, что вы добавляете их один поверх другого. Для правильного отображения их необходимо использовать механизм компоновки.

Например, этот код добавит их к FlowLayoutPanel сверху вниз.

Public Sub CreateTextBox()
  Dim I As Integer
  Dim panel as New FlowLayoutPanel()
  panel.FlowDirection = FlowDirection.TopDown
  For I = 1 To 5
    Dim myTextBox = New TextBox
    myTextBox.Text = "Control Number:" & I
    panel.Controls.Add(myTextBox)
  Next
  Me.Controls.Add(panel)

End Sub
2
Крис прав. Вы не установили местоположение, чтобы элемент управления использовал местоположение по умолчанию для каждого из них. Они сложены друг на друга.

Вы также можете создать отдельную коллекцию добавленных текстовых полей, чтобы вы могли получить к ним доступ отдельно от коллекции Forms.Controls.

Также вы можете использовать свойство .Tag, чтобы каким-то образом идентифицировать созданный элемент.

0

Вам нужно установить свойство ID элемента управления уникальным для каждого элемента управления. Также помните, что с помощью динамически созданных элементов управления вы должны воссоздавать их с каждым сообщением страницы, чтобы иметь возможность извлекать любую информацию из коллекции элементов управления.

  • 1
    Я думаю, что OP говорит о WinForms, а не о WebForms.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню