# Textbox mit Variable im Namen zu nummerieren?



## HolgerW (23. August 2006)

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


----------



## RamonR (23. August 2006)

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:



```
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:



```
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.


----------



## Shakie (24. August 2006)

RamonR hat gesagt.:
			
		

> Vielleicht hat ja noch jemand anders eine praktischere Lösung parat.


 Ich denke du hast da schon die zwei sinnvollsten Möglichkeiten aufgezeigt.


----------



## HolgerW (24. August 2006)

Hallo RamonR,

vielen Dank für deine Hilfe, die .Item-Lösung funktioniert problemlos.

Liebe Grüße,
Bartmouse


----------



## schachmat (26. August 2006)

Statt 
	
	
	



```
Text1.Item(i).text = ""
```
 reicht glaub ich auch 
	
	
	



```
Text1(i).text = ""
```

Und die zweite Möglichkeit kann man auch noch verkürzen:

```
dim c as textbox

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


----------



## RamonR (26. August 2006)

schachmat hat gesagt.:
			
		

> reicht glaub ich auch
> 
> 
> ```
> ...



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:
> 
> ```
> dim c as textbox
> ...





			
				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.


----------



## schachmat (26. August 2006)

Wenn c von vorneherein schon vom Typ Textbox ist, dann geht er in der Schleife auch nur alle Textboxen durch


----------



## RamonR (27. August 2006)

schachmat hat gesagt.:
			
		

> dim c as textbox



Hab ich doch glatt den Datentypen überlesen.  :suspekt: 

Ok, Einwand akzeptiert ;-)


----------



## andy1337 (27. August 2006)

Hallo,

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


```
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


----------



## RamonR (28. August 2006)

schachmat hat gesagt.:
			
		

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



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:


```
dim c as control

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


----------



## schachmat (29. August 2006)

Nur mal rein Interessehalber: In welcher Zeile meldet er den Fehler?


----------



## Shakie (30. August 2006)

Er meldet den Fehler in 
	
	
	



```
For Each c In Me.Controls
```


----------



## schachmat (30. August 2006)

Ja, das kann sein, da Me.Controls ja vom Typen Control ist. Gibt es da vielleicht eine Eigenschaft Me.Controls.Textboxes oder so was in der Art? Bei VB8 sollte das aber schon gehen.... muss ich demnächst mal ausprobieren


----------

