Reemplazar una casilla de verificación con imágenes

¿Existe alguna forma de establecer una imagen determinada a un checkbox con valor true y otro con valor false?

Aquí lo que hice es simplemente cambiar la visibilidad si previamente la casilla tiene un valor. Pero hacer clic en cada una no tiene acción porque creo que es demasiado complejo en vano.
¿Existe alguna forma de hacerlo?
Ahora, si en Windows 10 existe algo para insertar de forma automática el control de esta forma, mejor.

1 respuesta

Respuesta
1

Sasha: Creo que lo que te pongo a continuación cumplirá con los requisitos que buscas y en caso de no ser así, puede ser una base modificandolo.

Si dejas "visible" del Check en si, pero lo pones "detrás" de la Etiqueta (Pestaña Organizar >> Enviar al Fondo), parecerá que no tienes ese tipo de control.

Option Compare Database
Option Explicit
'Los Nombes de las Etiquetas, para que éste código funcione han de tener el nombre de EtiChkX
'Los Nombres de los ChekBox han de ser ChkX
'El valor X va del 1 al N y han de ser el mismo en EtiChk y en Chk
Private Sub Form_Load()
'Añado el Evento >> AfterUpdate a todos los CheckBox, para después poder acceder a las propiedades de sus etiquetas asociadas
For Each Ctrl In Me.Controls
        If Ctrl.ControlType = acCheckBox And Val(Mid(Ctrl.Name, 4)) > 0 Then
                Ctrl.AfterUpdate = "=PintaEtiqueta('" & Ctrl.Name & "')"
        End If
Next Ctrl
End Sub
Private Sub Form_Current()
'Pinto de Rojo las etiquetas que tengan el Check en True
Dim NumControl As Integer
Dim EtiquetaAPintar As String
For Each Ctrl In Me.Controls
        If Ctrl.ControlType = acCheckBox And Val(Mid(Ctrl.Name, 4)) > 0 Then
                'Tomo el valor de la derecha del CheckBox para componer el Nombre de la Etiqueta
                NumControl = Val(Mid(Ctrl.Name, 4))
                EtiquetaAPintar = "EtiChk" & CStr(NumControl)
                If Ctrl.Value = True Then
                        Me(EtiquetaAPintar).BackColor = RGB(255, 0, 0)
                        Me(EtiquetaAPintar).ForeColor = RGB(255, 255, 255)
                Else
                        Me(EtiquetaAPintar).BackColor = RGB(255, 255, 255)
                        Me(EtiquetaAPintar).ForeColor = RGB(0, 0, 0)
                End If
        End If
Next Ctrl
End Sub
Public Function PintaEtiqueta(StrControl As String)
Dim NumControl As Integer
Dim EtiquetaAPintar As String
On Error GoTo PintaEtiqueta_TratamientoErrores
'Tomo el valor de la derecha del CheckBox para componer el Nombre de la Etiqueta
NumControl = Val(Mid(Me.Controls(StrControl).Name, 4))
EtiquetaAPintar = "EtiChk" & CStr(NumControl)
If Me.Controls(StrControl).Value = True Then
        Me(EtiquetaAPintar).BackColor = RGB(255, 0, 0)
        Me(EtiquetaAPintar).ForeColor = RGB(255, 255, 255)
Else
        Me(EtiquetaAPintar).BackColor = RGB(255, 255, 255)
        Me(EtiquetaAPintar).ForeColor = RGB(0, 0, 0)
End If
PintaEtiqueta_Salir:
On Error GoTo 0
Exit Function
PintaEtiqueta_TratamientoErrores:
MsgBox "Error " & Err & " en Funcion.: PintaEtiqueta de Documento VBA: InscripcionesBolsas (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume PintaEtiqueta_Salir
End Function  'PintaEtiqueta(strControl As String)

Ya me contarás. Saludos >> Jacinto

Gracias por la respuesta pero no era precisamente lo que necesitaba.
De todos modos, no preguntes como, pero logré adaptar el código y lograr que se muestre o no la imagen del control en verde si es True o se oculte si es false y permita ver la imagen en rojo.

Private Sub Form_Current()
Dim NumControl As Integer, EtiquetaAPintar As String, CTRL As Access.CONTROL
For Each CTRL In Me.Controls
    If CTRL.ControlType = acCheckBox And VAL(Mid(CTRL.Name, 4)) > 0 Then
        'Tomo el valor de la derecha del CheckBox para componer el Nombre de la Etiqueta
        NumControl = VAL(Mid(CTRL.Name, 4))
        EtiquetaAPintar = "imgV" & CStr(NumControl)
        If CTRL.Value = True Then
            Me(EtiquetaAPintar).Visible = True
        Else
            Me(EtiquetaAPintar).Visible = False
        End If
    End If
Next CTRL
End Sub

Ahora, ¿cómo podría hacer para reemplazar la acción sobre el checkbox de activar o desactivar utilizando simplemente las imágenes teniendo en cuenta que la imgR (para las imágenes del control rojo) están siempre visibles y sólo las tapa el imgV (verde de activo) cuando la casilla es True?
Es decir, el clic sobre la imagen imgR de valor True a la casilla correspondiente y muestre la imgV; y, haciendo clic en la imgV desactive la casilla y oculte la imgV.

Shasa: La verdad es que iría aventurando respuestas con pocas probabilidades de acierto.

Si quieres que le eche una ojeada a tu BD y por alguna razón no quieres poner un enlace aquí, pon datos inventados y me la envías a [email protected]

Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas