[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