[vb.net] auf Controls anhand ihrer Eigenschaften zugreifen
Gepostet am: May 04, 2011 3:29:9 PM
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
For i As Integer = 1 To 10 Dim myControl As Control = Controls("Textbox" & i) mycontrol.text = i Next
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
Private Function getTextboxByTag(ByVal myForm As Form, ByVal strTag As String) As TextBox For Each ctrl As Control In myForm.Controls If TypeOf ctrl Is TextBox Then If ctrl.Tag = strTag Then Return ctrl End If End If Next Return NothingEnd Function
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)
getTextboxbyName
Private Function getTextboxByName(ByVal myObject As Object, ByVal strName As String) As TextBox For Each ctrl As Control In myObject.Controls If TypeOf ctrl Is TextBox Then If ctrl.Name = strName Then Return ctrl End If Else 'die nächste Ebene durchlaufen (rekursiver Aufruf) Dim tmpTB As TextBox = getTextboxByName(ctrl, strName) If Not IsNothing(tmpTB) Then Return tmpTB End If End If Next Return NothingEnd Function