Dar el aspecto de "DISABLE" a los controles contenidos en un frame

 

Fecha: 24/Ago/98 (20/Ago/98)
Autor: Javier Nieto
Jnieto@syseca.es


Autor: Javier Nieto Esteban
e-mail jnieto@syseca.es
Fecha: 16 Agosto 1998  

DAR EL ASPECTO DE "DISABLE" A LOS CONTROLES CONTENIDOS EN UN FRAME

CONCEPTO

.
.En alguna ocasión, te habrá sido necesario deshabilitar los controles contenidos en un frame. Sin embargo, si marcamos como enabled= false la propiedad del frame, el efecto no deja demasiado claro visualmente dicha necesidad.

Nosotros mismos podemos definir como queremos mostrar un determinado control como habilitado o deshabilitado jugando además de con la propiedad enabled, con el backcolor, la propiedad locked y cualquier otra que se te ocurra.

CONSTRUCCIÓN DEL CÓDIGO

.
.Este ejemplo muestra de una forma fácil como recorrer los controles contenidos en un formulario, como preguntar por sus tipos y como actuar en consecuencia. El código es sencillo y puede ser utilizado sin ningún problema.

Se muestra en el código solo las funciones Disable, las Enable tienen la misma estructura pero con el código a la inversa.

Public Function DisableFrame(fraFrame As Frame) As Boolean
Dim contrl As Control

On Error GoTo 0

With fraFrame
        For Each contrl In .Parent.Controls
            If TypeName(contrl) <> "CommonDialog" Then
                If contrl.Container.Name = .Name Then
                        If TypeName(contrl) = "Frame" Then
                            Call DisableFrame(contrl)
                        Else
                            Call DisableControl(contrl)
                        End If
                End If
            End If
        Next contrl
End With


End Function

La función es recursiva para permitir frames anidados. Otra cosa a tener en cuenta es que no todos los controles tienen container, por lo que tendremos que preguntar en el bucle. A modo de ejemplo, en esta función preguntamos por el control CommonDialog .

 

DisableControl y EnableControl deberán ser definidas a nuestro antojo para implementar el efecto deseado. Como ejemplo, podrían ser:

Public Sub DisableControl(Ctrl As Control)
'
    Select Case TypeName(Ctrl)
    Case "TextBox"
	Ctrl.BackColor = vbInactiveBorder 
	Ctrl.Locked = True
    Case "Label"
	'No hago nada
    Case "ComboBox"
	Ctrl.BackColor = vbInactiveBorder
	Ctrl.Enabled = False
    Case Else
	Ctrl.Enabled = False
    End Select

    DoEvents
End Sub 

Comentarios, dudas y quejas a jnieto@syseca.es


ir al índice