在VB .NET中查找动态添加的控件

问题描述

| 我创建了一个新的标签页,并在其中添加了一个富文本框:
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)
我收到以下错误:
A first chance exception of type \'System.NullReferenceException\' occurred in program.exe
我知道名称是严格的,因为我已经在create方法中打印了名称,并且已经在尝试访问它的代码中打印了名称字符串。 因此,从外观上看,
.Item()
不是访问控件的正确方法。 那么如何访问动态创建的控件呢?     

解决方法

        您正在将动态控件添加到名称为“ 4”的容器中,然后在表单容器中查找它。您可以使用
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)
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...