Textbox mit Variable im Namen zu nummerieren?

HolgerW

Grünschnabel
Hallo Gemeinde,

ich habe ein Formular mit vielen Textboxen. Nun möchte ich zum Beispiel zum Leeren aller Boxen nicht jede Box einzeln ansprechen sondern mit einer Schleife und einer Laufvariablen die Boxen leeren.

Ich stelle mir das ungefähr so vor:

Dim lauf

For lauf = 1 to 100
textbox(lauf).text=""
Next

Jedoch scheint das so nicht zu funktionieren. Kann mir da jemand weiter helfen? Wie benenne ich eine Textbox mit einer Variablen im Namen? Geht das überhaupt?

Vielen Dank für eure Hilfe,
Holger
 
Hallo,

um die Textboxen in einer Schleife zu leeren, fallen mir zwei Möglichkeiten ein:

  • Statt vieler einzelner Textboxen erzeugst Du Dir ein Textbox-Array, d.h. alle Textboxen erhalten den selben Namen aber eine individuelle fortlaufende Index-Nummer (in der Formular-Ansicht ist das die Index-Eigenschaft des Steuerelements).

    Dann kannst Du in einer Schleife alle Textboxen des Arrays leeren, z.B. wenn das Textbox-Array Text1 heißt:
Code:
dim i as long
for i = Text1.lbound to Text1.ubound step 1
  Text1.Item(i).text = ""
next i
  • Da Du wahrscheinlich nicht alle Textboxen umbenennen und ihnen eine Index-Nummer zuweisen willst, gibt es noch eine Möglichkeit mit der Du alle Textboxen eines Formulars leeren kannst:
Code:
dim c as control

for each c in controls
  if typeof c is textbox then
    c.text = ""
  endif
next c

Vielleicht hat ja noch jemand anders eine praktischere Lösung parat.
 
Statt
Code:
Text1.Item(i).text = ""
reicht glaub ich auch
Code:
Text1(i).text = ""

Und die zweite Möglichkeit kann man auch noch verkürzen:
Code:
dim c as textbox

for each c in form1.controls
    c.text = ""
next c
 
schachmat hat gesagt.:
reicht glaub ich auch

Code:
Text1(i).text = ""

Ja, würde vollkommen reichen, ich bevorzuge aber die andere Schreibweise ... jedem das seine ;-)

schachmat hat gesagt.:
Und die zweite Möglichkeit kann man auch noch verkürzen:
Code:
dim c as textbox

for each c in form1.controls
    c.text = ""
next c

Al Borland hat gesagt.:
Das glaube ich nicht, Tim!
;)

Da nicht jedes Control der Form eine Textbox seien muss, dürftest Du dort auf einen Fehler laufen. Andere Controls haben ja teilweise nicht die .Text Eigenschaft.
 
Zuletzt bearbeitet:
Wenn c von vorneherein schon vom Typ Textbox ist, dann geht er in der Schleife auch nur alle Textboxen durch;)
 
Hallo,

man kann es aber auch so schreiben, wenn ich die Frage richtig verstanden habe, um die txtboxen zu leeren:

Code:
Private Sub cmdReset_Click()

    ClearTextBoxesOnForm

End Sub

Public Sub ClearTextBoxesOnForm()

    Dim ctl As Control
    For Each ctl In Me.Controls
        If TypeOf ctl Is TextBox Then
            ctl.Text = ""
        End If
    Next

End Sub
:suspekt:

so schreib ich es immer...

mfg andy
 
schachmat hat gesagt.:
Und die zweite Möglichkeit kann man auch noch verkürzen:
Code:
dim c as textbox

for each c in form1.controls
    c.text = ""
next c

Ich muss das Thema nochmal hochholen, denn der Code funktioniert leider nicht.
Ich hatte es vor langer Zeit auch mal so probiert und hatte noch dunkel in Erinnrerung, dass er nicht klappt (zumindest unter VB6).

Wenn ich o.g. Code verwende ist das Resultat meines Kompilers:

VB6-Kompiler hat gesagt.:
Laufzeitfehler '13':
Typen unverträglich

Deshalb verwende ich schon seit langem:

Code:
dim c as control

for each c in controls
  if typeof c is textbox then
    c.text = ""
  endif
next c
 
Zurück