Rubrik: Controls · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 22.01.02 |
Alle Controls eines Frames disablen/enablen Dieser Tipp zeigt, wie sich alle Controls innerhalb eines Frame-Steuerelements deaktivieren und aktivieren lassen. | ||
Autor: Dieter Otter | Bewertung: | Views: 28.852 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wie lassen sich Controls disablen bzw. enablen? Ganz klar - mit der Enabled-Eigenschaft.
Wie lassen sich alle Controls innerhalb eines Frame-Controls disablen bzw. enablen? Auch klar - man setzt einfach die Enabled-Eigenschaft des Frame-Controls auf True oder False. Ist das Frame deaktiviert, so sind bekanntlich gleichzeitig auch alle Controls innerhalb des Frame deaktiviert - nur, dass es dem Anwender vielleicht nicht sofort auffällt, da die Controls weiterhin "normal" und nicht grau angezeigt werden.
Um alle Controls eines Frame (oder sonstigen Container-Steuerelements) zu (de-)aktivieren, können Sie auch nachfolgenden Prozedur einsetzen. Per For..Each Schleife werden alle Controls einer Form durchlaufen. Über die GetParent-API Funktion wird das Handle des Eltern-Controls ermittelt. Entspricht das Handle dem Handle des Conatiners, so handelt es sich um ein Control innerhalb des angegebenen Containers.
' zunächst die benötigte API-Deklaration Private Declare Function GetParent Lib "user32" ( _ ByVal hwnd As Long) As Long
Public Sub EnableContainer(F As Form, _ Container As Control, ByVal Enabled As Boolean) Dim C As Control Dim phWnd As Long phWnd = Container.hwnd ' Fehlerbehandlung einschalten, falls ein Control ' keine hWnd-Eigenschaft besitzt On Local Error Resume Next For Each C In F Err = 0 If GetParent(C.hwnd) = phWnd Then If Err = 0 Then C.Enabled = Enabled End If End If Next On Local Error GoTo 0 End Sub
Anmerkung
Der Umweg über GetParent muss deshalb erfolgen, da ein Frame- oder PictureBox Control nicht wie das Form-Objekt über eine Controls-Auflistung verfügt.
Beispiel
Alle Controls in Frame1 deaktivieren:
EnableContainer Me, Frame1, False
Alle Controls in Frame1 wieder aktivieren:
EnableContainer Me, Frame1, True