[Access] mehrere Objekte sichtbar/unsichtbar machen

Willi_Kaiser

Mitglied
Hallo liebe Tutorianer,

ich bin gerade am Vba Programmieren und habe mehrere Buttons vor mir das bei einer bestimmten Methode sichtbar und bei einer anderen unsichtbar werden sollen. Jetzt kann ich jeden einzelnen Button ansprechen und die Sichtbarkeit ändern doch das ist mühsam und nicht wirklich schön. Hat jemand einen Vorschlag wie man sich das möglicherweise erleichtern kann? Ich bin benutze Microsoft Access 2007.

Freue mich auf eure Infos

MFG
 
ich kann zb. die Buttons so sichtbar/unsichtbar machen:

Button1.visible = true
Button2.visible = true
Button3.visible = true
Button4.visible = true
Button5.visible = true
Button6.visible = true
Button7.visible = true

Kann man das auch irgendwie vereinfachen, dass ich alle Buttons auf ein mal ansprechen kann ?
 
Ich habe hier mal ein Beispeil mit den Buttons cmd1 bis cmd3. Der Aufuf ist am Schluss nur noch Call enableControls("cmd1", "cmd3")
Visual Basic:
Option Compare Database
Option Explicit

Private nodes()         As node
Private Type node
    ctrl        As Control
    visible     As Boolean
    name        As String
End Type

'Events der Buttons
Private Sub cmd1_Click()
    Call enableControls("cmd2")
End Sub

Private Sub cmd2_Click()
    Call enableControls("cmd1", "cmd3")
End Sub

Private Sub cmd3_Click()
    Call enableControls("cmd1", "cmd2", "cmd3")
End Sub

'Initialisierne des ganzen
Private Sub Form_Load()
    'Alle Buttons anhängen)
    Call addControl(Me.cmd1)
    Call addControl(Me.cmd2)
    Call addControl(Me.cmd3)
End Sub

'Buttons in die Liste ausfnehmen
Private Sub addControl(ByRef iCtrl As Control)
    Dim index       As Integer
    
On Error Resume Next
    index = UBound(nodes) + 1
    If Err.Number <> 0 Then index = 0
    
    ReDim Preserve nodes(index)
    Set nodes(index).ctrl = iCtrl
    nodes(index).visible = False
    nodes(index).name = iCtrl.name
    
End Sub

'Alle Buttons durchgehen und ggf einblenden
'Da access keine Elemente die den Focus haben hidden kann, ists hier ein wenig kompliziert
Private Sub enableControls(ParamArray Params() As Variant)
    Dim ctrlName         As Variant
    Dim i               As Integer
    
    'visible vordefinieren
    For i = 0 To UBound(nodes)
        For Each ctrlName In Params
            If nodes(i).name = ctrlName Then
                nodes(i).visible = True
                Exit For
            Else
                nodes(i).visible = False
            End If
        Next ctrlName
    Next i
    
    'Focus-Problem lösen. ALso den ersten einzublenden Button einblenden und den Focus setzen
    Me(Params(0)).visible = True
    Me(Params(0)).SetFocus
    
    'Die Matrize auf die Controls anwenden
    For i = 0 To UBound(nodes)
        nodes(i).ctrl.visible = nodes(i).visible
    Next i
    
End Sub
 
Jepp. Und es fiel mir echt schwer ohne meine Array-Funktionssammlung zu arbeiten.
Der Grösste Knackpunkt ist aber schon, dass man ein Control das den Focus hat nicht ausblenden kann oder mindestens den Focus vorübergehen ins Nirvana schicken kann.
 
Wenn man eh plant, ein Control auf invisible zu setzen kann man ja programmatisch vorher noch den Fokus woanderst hinschicken. Ist ja jetzt nicht der Riesen-Hack... :)
 
Zurück