0

新しいタブページを作成し、リッチテキスト ボックスも追加しました。

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

1 に答える 1

2

ダイナミック コントロールを名前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)
于 2011-06-13T19:44:38.477 に答える