Найти динамически добавленный элемент управления в VB .NET - PullRequest
0 голосов
/ 13 июня 2011

Я создал новую вкладку и добавил к ней richtextbox:

Private Sub AddTab(ByVal ctrl As TabControl, _
                              ByVal text As String)
    If Me.InvokeRequired Then
        Me.Invoke(New AddTabDelegate(AddressOf AddTab), _
                  New Object() {ctrl, text})
        Return
    End If

    Dim NewTab As New TabPage
    NewTab.Name = "OutputTab" & outputs.Item(outputs.Count - 1)
    NewTab.Text = "Domain"
    Dim NewTextbox As New RichTextBox
    NewTextbox.Name = "OutputTextbox" & outputs.Item(outputs.Count - 1)

    ctrl.Controls.Add(NewTab)
    NewTab.Controls.Add(NewTextbox)
End Sub

Теперь я пытаюсь получить доступ к richtextbox где-то еще в коде:

Dim NewTextbox As RichTextBox
NewTextbox = Me.Controls.Item("OutputTextbox" & current_output)
debug.print(NewTextbox.name)

Iполучить следующую ошибку:

A first chance exception of type 'System.NullReferenceException' occurred in program.exe

Я знаю, что имя является точным, потому что я напечатал имя в методе создания, и я напечатал строку имени в коде, где я пытаюсь получить к нему доступ.

Так что, судя по всему, .Item() - неправильный способ доступа к элементу управления.

Так как получить доступ к динамически созданному элементу управления?

1 Ответ

1 голос
/ 13 июня 2011

Вы добавляете динамический элемент управления в контейнер по имени ctrl, а затем ищете его в контейнере формы.Вы можете искать рекурсивно, используя Me.FindControl(), но в вашем случае, поскольку вы знаете контейнер с RichTextBox, было бы более эффективно сделать что-то, как показано ниже.

Попробуйте

Dim NewTextbox As RichTextBox
Dim NewTab as TabPage
NewTab = ctrl.Controls.Item("OutputTab" & current_output)
NewTextbox = newTab.Controls.Item("OutputTextbox" & current_output)

debug.print(NewTextbox.name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...