Es gibt immer wieder Situationen, in denen man Controls ansprechen möchte, von denen man lediglich ein bestimmtes Attribut kennt. 

Dies ist noch relativ einfach, wenn man beispielsweise den Namen kennt. Will man beispielsweise allen Textboxen deren Namen beispielsweise Textbox1, Textbox2 … lautet, so kann man dies mittels

Controls dynamisch ansprechen

Erläuterungen:

  • Die Schleife For i As Integer = 1 To 10 wiederholt sich zehn Mal, mit i von 1 bis 10.
  • In jedem Durchgang der Schleife wird versucht, ein Steuerelement (Control) auf der Form zu finden, dessen Name der Konvention TextboxX folgt, wobei X der laufenden Nummer entspricht.
  • Me.Controls("Textbox" & i) greift auf die Controls-Sammlung der Form zu und sucht nach einem Control mit dem spezifizierten Namen.
  • Es wird eine Typüberprüfung durchgeführt, um sicherzustellen, dass das gefundene Control tatsächlich eine TextBox ist. Dies verhindert Laufzeitfehler, falls kein Control mit dem angegebenen Namen gefunden wird oder das Control ein anderer Steuerelementtyp ist.
  • Der Text des Textfelds wird dann auf den aktuellen Wert von i gesetzt.

Komplizierter wird es, wenn man die Controls nicht anhand ihres Namens ansprechen will, sondern aufgrund bestimmter Eigenschaften erst suchen muss. Will man beispielsweise alle Controls mit einem bestimmten Tag ansprechen, so geht das nur, wenn man alle Controls durchläuft.Dies könnte man beispielsweise so realisieren

Textfeld mittels Tag ansprechen

Erläuterung des Codes:

  • Die Funktion nimmt ein Form-Objekt (myForm) und einen String (strTag) als Parameter.
  • Sie durchläuft alle Steuerelemente (Controls) auf der übergebenen Form.
  • Für jedes Steuerelement wird überprüft, ob es vom Typ TextBox ist und ob sein Tag-Attribut mit dem gesuchten String (strTag) übereinstimmt.
  • Wird ein passendes TextBox gefunden, wird es als Rückgabewert der Funktion zurückgegeben.
  • Falls kein entsprechendes TextBox gefunden wird, gibt die Funktion Nothing zurück.

Achtung:

Dies funktioniert nicht, wenn die Controls bestandteile anderer Controls sind. Auch wenn man Me.Textbox1 direkt ansprechen kann, kann es sein, dass es sich beispielsweise um eine Textbox in einem Panel oder in einer Groupbox handelt. Dann kann man sie nicht auf diese Methoden ansprechen.

Aber auch für diesen Fall gibt es eine Lösung: (die selbe Funktion, die sich rekursiv aufruft)

Erläuterung des Codes:

  • Die Funktion getTextboxByName nimmt ein Objekt (myObject), das Controls enthält, und einen String (strName) als Parameter.
  • Sie durchläuft alle Steuerelemente (Controls) in myObject.
  • Für jedes Steuerelement wird überprüft, ob es vom Typ TextBox ist und ob sein Name-Attribut mit dem gesuchten String (strName) übereinstimmt.
  • Wird ein TextBox mit dem entsprechenden Namen gefunden, wird es zurückgegeben.
  • Falls das aktuelle Steuerelement kein TextBox ist oder nicht den gesuchten Namen hat, wird die Funktion rekursiv aufgerufen, um auch in untergeordneten Steuerelementen zu suchen.
  • Falls kein entsprechendes TextBox gefunden wird, gibt die Funktion Nothing zurück.