Rubrik: Controls · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 26.06.03 |
Prüfen, ob Control existsiert Eine Universalfunktion, mit der sich feststellen lässt, ob ein Control oder Controlarray-Element auf einer Form existsiert oder nicht. | ||
Autor: Dieter Otter | Bewertung: | Views: 19.331 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wie lässt sich prüfen, ob auf einer Form ein bestimmtes Control vorhanden ist oder nicht?
Eine Quick-and-dirty-Methode wäre folgende:
On Error Resume Next Dim sName As String Dim bExists As Boolean sName = Form1.Controls("Controlname").Name bExists = (Err.Number = 0) On Error Goto 0
Für den ein oder anderen Zweck würde obige Abfrage auch ausreichen. Wie sieht es aber aus, wenn es sich um ein Control aus einem Steuerelementfeld handelt? In diesem Fall würde obige Funktion versagen, da sich hier kein Index angeben lässt.
Aus diesem Grund stellen wir Ihnen heute nachfolgende Universal-Funktion vor:
' Prüfen, ob ein bestimmten Control oder ' Controlarray-Element existsiert Public Function ControlExists(oForm As Form, _ sControlName As String, _ Optional Index As Variant) As Boolean Dim oControl As Control Dim bExists As Boolean Dim nIndex As Integer ' Control-Name für den Vergleich ' in Kleinbuchstaben umwandeln sControlName = LCase$(sControlName) ' Fehlerbehandlung einschalten On Error Resume Next ' alle Controls der Form durchlaufen For Each oControl In oForm With oControl ' Name vergleichen If LCase$(.Name) = sControlName Then ' Ok... Control gefunden Err.Clear If IsMissing(Index) Then ' Kein Index: Prüfen, ob es sich um ein ' Einzelcontrol handelt (kein Steuerlementfeld!) nIndex = .Index If Err.Number <> 0 Then bExists = True: Exit For End If Else ' Index vergleichen If .Index = Index Then If Err.Number = 0 Then bExists = True: Exit For End If End If End If End If End With Next On Error GoTo 0 ControlExists = bExists End Function
Auch hier benötigen wir eine On Error Resume Next-Anweisung, da uns VB einen Fehler "ausspucken" würden, wenn man versucht die Index-Eigenschaft eines Controls zu lesen, dass jedoch kein Element eines Steuerlementfeldes ist.
Jedoch können wir mit dieser Funktion sowohl "normale" Controls abfragen, als auch bestimmte Controls eines Steuerelementfeldes.
Aufrufbeispiel:
If ControlExists(Form1, "Text1") Then Text1.Text = "Test"
If ControlExists(Form1, "Text2", 1) Then Text2(1).Text = "Test"