Zugrif auf dynamische TextBox

Liebe/-r Experte/-in,
Hallo
Besteht eine Möglichkeit auf Dynamisch erzeugte TextBox zugreifen, z.B. durch Ereignis wieder neu beschreiben oder auszulösen, oder ist das ein Irrweg?
Suche verzweifelt nach einer Lösung, habe schon Anfragen gesendet, jedoch scheint meine Frage zu dumm oder zu schwer.
Ich bin Programmieranfänger.
Hier der Syntax zur Erstellung der TextBox
Public Class Form1

Inherits System.Windows.Forms.Form
Dim Tb00 As New TextBox
Dim Tb01 As New TextBox
.
.

Private Sub AddTB()
Dim Tb As New TextBox
Dim i As Integer
Dim j As Integer
Dim txt As String
Dim zahl As Integer

For i = 0 To 3
For j = 0 To 3
txt = i & j
Tb = New TextBox
Tb.Width = 20
Tb.Height = 20
Tb.Left = 20
Tb.Top = 20
Tb.Location = New Point(50 + i * 30, 100 + j * 30)
Me.Controls.Add(Tb)

Tb.Name = „Tb“ & i & j
Tb.Text = txt
Next
Next
End Sub…
Private Sub weiter()
Dim intzahl As Integer
???Ungültige Konvertierung
zahl = Tb01.Text
???Keine Auswirkung auf TextBox
Tb00.Text = 88
End Sub

Habe das Gefühl es gibt hier 2 paralele Tb. Wo liegt der Fehler?

Bitte gebt mir eine Antwort, nur um zu wissen das die Anfrage nicht ins Nirwana geht.
Danke in voraus

Hallo ahund,

folgende Anmerkungen zu Deinem Code.

Tb = New TextBox muss Set Tb = New TextBox heißen

Dim mit New und Set stören sich, nutze Dim ohne New.

Definiere in der Klasse nur allgemeine Funktionen der Klasse, welche die Textbox nicht liefert. Ansonsten benötigst Du keine Klasse sondern nur Code in einer Function oder Sub.

Willst Du mehrere Objekte über einen Namen ansprechen, nutze die Datenstruktur der Collection.

Das sollte Dir schon weiterhelfen. Leider habe ich gerade keine Zeit, Dir den Code umzuschreiben.

mfg

Trampi

Hallo Trampi

danke für deine Antwort. Habe da noch eine schwere Nuss zu knacken, bin Programmieranfänger, mir gelingt schon nicht einmal die umschreibung Tb = New TextBox ins Set Tb = New TextBox, es wird mir sofort wieder automatisch korrigiert in Tb = New TextBox.
Also noch mal danke

Hallo ahund,

nur Mut :wink:

Ich vermute, dass Du mit einer neueren VB-Version arbeitest. Ich bin in der Regel mit Excel-VBA 2003 unterwegs. Da gibt es schon mal unterschiede. Lege am besten mit kleinen Projekten los. Klassenmodule sind dann eher was Aufwändigeres. Arbeite mal an einem kleinen Programm, in dem Du eine Textbox nutzt, dann mal mit einer Collection von Objekten, dann erst später mit einer einfachen Klasse usw. Und immer schön in die Hilfe gucken.

mfg

Trampi

Hallo Trampi,
dummerweise habe ich nicht bekanntgegeben das ich den Text mit Microsoft Visual Basic 2010 Express geschrieben habe, sorry.
Ich habe schon ziemlich lange gebraucht um diese Dynamische Boxen überhaubt zu generieren, nur jetzt komme überhaubt nicht weiter auch die MS Hilfe, habe in Internet umgeschaut usw. nachgefragt, alles ohne Ergebnis.
Danke nochmal und eine schjöne Woche.

Hallo,
ich weiß leider nicht genau, was du erreichen möchtest. Aber ich beschreibe einfach mal was mir an deinem Code aufgefallen ist:

  • TB00 und TB01 werden zwar deklariert, jedoch weder istantiiert (TB00 = New TextBox) noch auf der Form platziert. Deshalb hat auch die Zuweisung an TB00.Text keine Auswirkung

  • Du legst die Position deiner TextBoxen mit Tb.Left und Tb.Right fest, das ist jedoch völlig unnötig da du es direkt in der Nächsten Zeile wieder überschreibst indem du die Position mit Tb.Location zuweist.

  • Die Fehlermeldung in der Prozedur „weiter“ kommt wahrscheinlich daher, dass du der Variable „zahl“ einen Wert zuweisen möchtest, diese ist dort allerdings gar nicht gültig. Die Variable ist nur dort gültig wo sie definiert wurde (-> Sub AddTB). Entweder du definierst sie Global (=außerhalb jeder Prozedur) oder innerhalb der Prozedur „weiter()“.

Wenn du auf dynamisch erstellte TextBoxen nachträglich noch zugreifen möchtst, musst du sie (genauer gesagt die Referenz darauf) speichern. Das mach man am einfachsten in einer „List(Of TextBox)“. Ein kleines Beispiel:

Dim TextBoxList As New List(Of TextBox)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

For i As Integer = 1 To 10
Dim myTextBox As New TextBox
TextBoxList.Add(myTextBox)
Me.Controls.Add(myTextBox)

With myTextBox
.Location = New (20, 30 * i)
.Width = 200
.Name = „TextBox“ & CStr(i)
.Text = .Name
End With
Next i
End Sub

Der Zugriff auf eine Bestimmte Textbox erfolgt dann folgendermaßen:
TextBoxList(5).Text = „Hallo“

Ich hoffe das hat dich ein bisschen weiter gebracht.

Gruß Florian

Hallo Florian,
danke für deine schnelle, präzise, konkrete und vor alle hilfreiche Antwort. War schon fast verzweifelt. Werde gleich morgen deine Tipps umsetzen.
Nochmal danke