Hacer invisibles mediante código campos de texto o etiquetas en un formulario de ACCESS

Pretendo crear en un formulario de access un comando en el que al hacer clic sobre él, mediante código, me realice las siguientes tareas:

a) Hacer invisibles -además de inhabilitar- determinados campos de texto y las etiquetas de éstos.

b) Obviamente el comando debería posibilitar revertir la situación anterior -por si tuviese que hacer cambios- de tal forma que, por ejemplo, al hacer un primer clic sobre él aparezca en él el texto 'Habilitar', al hacer un segundo clic el texto tornaría a 'Deshabilitar', al hacer un tercero 'Habilitar' y así sucesivamente...

¿Es posible?

2 respuestas

Respuesta
1

Suponiendo que tu botón se llame cmdBloquea (Propiedades->Otras->Nombre) y tu cuadro de texto se llame txtCampo1 y la Etiqueta lblCampo1 (y así ...), el código que tendrías que asociar al evento "Al hacer click" del botón sería:

Private Sub cmdBloquea_Click()

Const miTit1 As String="Habilitar"

Const miTit2 As String="Desabilitar"

If Me.cmdBloquea.Caption=miTit1 Then

Me.cmdBloquea.Caption=miTit2

Me.lblCampo1.Visible=True

Me.txtCampo1.Visible=True

Me.lblCampo2.Visible=True

Me.txtCampo2.Visible=True

'... y así el resto de controles

Else

Me.cmdBloquea.Caption=miTit1

Me.lblCampo1.Visible=False

Me.txtCampo1.Visible=False

Me.lblCampo2.Visible=False

Me.txtCampo2.Visible=False

'... y así el resto de controles

End If

End Sub

Soy nuevo en este foro... Y la respuesta de Sveinbjorn El Rojo, me deja ESTUPEFACTO!: RAPIDEZ -nunca había visto cosa igual- y EFICACIA.

Me quedan algunos flecos -que visto lo visto plantearé por aquí a no mucho tardar...-, pero... ALUCINANTE, Sveinbjorn El Rojo, GRACIAS!!!!.

Por cierto: cómo puedo valorar y puntuar la respuesta a mi pregunta?

http://blog.todoexpertos.com/post/2014/09/10/como-valoro-las-respuestas-a-mis-preguntas 

En la parte de abajo (de la pregunta o de la última respuesta) deberías tener un botón o un desplegable (hace tiempo que no hago ninguna pregunta) para seleccionar la valoración y finalizar la pregunta.

Avanzando en lo que pretendía sigo contando 'cosas':

a) Estando ya más cerca de lo que pretendo he cambiado los 'títulos' de 

Const miTit1 As String="Habilitar"

Const miTit2 As String="Desabilitar"

Por los más adecuados de "Ocultar" - ''Visualizar'

Lo de los nombres que te puse era orientativo, lo importante es que al menos uno sea el que tienes en la propiedad "Título" de tu botón, pues de lo contrario tendrás que hacer dos clicks para según qué acción. XD

Avanzando en lo que pretendía sigo contando 'cosas':

a) Estando ya más cerca de lo que pretendo he cambiado los 'títulos' de 

                     Const miTit1 As String="Habilitar"

                     Const miTit2 As String="Desabilitar"

Por los más adecuados de "Ocultar" / ''Visualizar'
b) Los controles del formulario que pretendo 'Ocultar'/'Visualizar' son controles de Hipervínculos -estéticamente 'feos'- con el fin de abrirlos desde controles de cuadros de texto que los describen de modo 'estéticamente' más adecuado en el mismo formulario... Inicialmente no se me ha ocurrido nada mejor que asociar al evento 'Al hacer clic' en estos últimos cuadros de texto descriptivos de los Hipervínculos la línea de código: Docmd.GoToControl "Hipervínculo1"; con ello he conseguido el magro resultado de ir al control previsto -sin siquiera ejecutarlo- cuando el control del Hipervínculo está 'Visualizdo', y, NI SIQUIERA ESO cuando está 'Oculto'... y menos aún, claro, ABRIRLO COMO ES MI PRETENSIÓN FINAL... 

Creo que te estás complicando sin necesidad..

Verás:

1º/ GoToControl sólo funciona si el control al que quieres ir está visible, de forma análoga a lo que hace SetFocus.

2º/ Si quieres abrir un hipervínculo (o un archivo), y no tener un campo de tipo hipervínculo, puedes usar el método Application. FollowHyperlink.

Por ejemplo, si en tu cuadro de texto (txtCampo1) tienes el valor "www.google.es", puedes asociar al evento "Al hacer click" o "Al hacer doble click" este código:

Application.FollowHyperlink Me.txtCampo1

Si en vez de una dirección web, tienes la ruta completa, con nombre y extensión de un archivo (un word, una imagen...), puedes hacer lo mismo y se te abrirá el archivo con el programa predeterminado que tenga tu PC.

Puedes ver las otras opciones del método en este enlace: https://msdn.microsoft.com/es-es/library/office/Ff822080.aspx 

Y aquí tienes otra respuesta sobre este tema: Hipervínculo

¡Gracias! 

SVEINBJORN EL ROJO: Genial! El método Application. FollowHyperlink me ha funcionado a la primera: me ha abierto el hipervínculo pese a que lo había 'invisibilizado' -perdón por el palabro-     : - )

Ya sólo me queda un temilla para cerrar el círculo: Al abrir el formulario del que hablo al principio de esta conversación, en el que he incluido el botón de comando que me indicaste con el código al hacer clic que asimismo me indicaste, me lo abre con la leyenda: "Bloquea" -o sea el nombre que le he dado al botón- ¿no podría hacerse que se muestre el título que corresponda a la situación 'Ocultar/Visualizar' que tenga el formulario cuando se salió de él la última vez?

Perdón, creí que con una respuesta a la última pregunta habría terminado todo pero me temo que no, y es que me doy cuenta que cada vez que abro el formulario en el que 'Oculto/Visualizo' los cuadros de texto de hipervínculos y etiquetas a ellos asociados, SIEMPRE se abre visualizando aquéllos y éstas, ¿no podría abrirse con la última situación (visualización u ocultación) de cuadros y etiquetas con que se se salió de él la última vez? -y es que lo normal es que se salga de él teniendo ocultos los hipervínculos y sus etiquetas-.

1º/ Para cambiar la leyenda del botón, saca sus propiedades, y en la pestaña Formato -> Titulo ponle el que quieras por defecto, que ha de ser uno de los dos que pusiste en las constantes del código, como te decía en el post anterior.

2º/ Al abrir el formulario, el botón tendrá la leyenda que le pongas en la propiedad titulo. Si quieres que te guarde los cambios, tendrías que cerrar el formulario, abrirlo en vista diseño, cambiarle el valor de la propiedad y cerrarlo guardando los cambios, que si bien se puede hacer, me parece liarla demasiado.

En el evento "Al activar el registro" de tu formulario, ponle este código, prácticamente idéntico al del botón, pero sin cambiarla leyenda del mismo:

If Me.cmdBloquea.Caption="Visualizar" Then

Me.lblCampo1.Visible=True

Me.txtCampo1.Visible=True

Me.lblCampo2.Visible=True

Me.txtCampo2.Visible=True

'... y así el resto de controles

Else

Me.lblCampo1.Visible=False

Me.txtCampo1.Visible=False

Me.lblCampo2.Visible=False

Me.txtCampo2.Visible=False

'... y así el resto de controles

End If

A ver si así te sirve.

Respuesta
1

Rafael: Si los Controles son pocos, en el Evento Click del Botón pones algo así:

Me.TextBox01.Visible = False

Me.Etiqueta01.Visible = False

Y así con los que quieras ocultar, y entiendo que no tiene sentido inhabilitarlos, si están ocultos.

Cuando dices inhabilitat ignoro si quieres decir solo Bloquear o realmente inhabilitar.

Para Bloquear sin esconder >> Me.TextBox01.Locked = True

Para inhabilitar>> Me.TextBox01.Enabled = False

Las acciones contrarias para: Mostrar .Visible = True

Para desbloquear>> .Locked = False

Para habilitar >> .Enabled = True

Si los Controles son Muchos tendrías que utilizar un Bucle para recorrerlos y hacer con ellos lo que desees.

Ejemplo para etiquetas:

Dim Ctrl As Control

For Each Ctrl In Me.Controls
       If Ctrl.ControlType = acLabel And Left(Ctrl.Name, 3) = "Eti" Then
                    Ctrl.Visible = False
       End If
Next Ctrl

Espero haberte ayudado>> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas