Cambiar propiedades de controles

¿Cómo puedo hacer para que en todos los campos de texto de un formulario al recibir el enfoque salga el texto amarillo en fondo rojo y al perderlo salga el texto negro sobre fondo blanco?.
Uno a uno ya se como hacerlo. Lo que me interesa es saber si hay alguna forma de hacerlo de forma diferente para no tener que introducir el código uno a uno cambiando solamente el nombre :
apellidos.backcolor=rgb(0,0,0)
nombre.backcolor=rgb(0,0,0)

4 respuestas

Respuesta
1
Me temo que lo mio es más de lo mismo pero en fin,
Puedes tener un modulo con una función para poner el color activo y otra para el color inactivo, digamos fColor y fNormal
También tienes que poner la propiedad en cada control, en eventos, pero al menos es solo en tiempo de diseño y no requiere código interno en el formulario.
Al recibir enfoque: fColor()
Al Perder enfoque: fNormal()
Si te interesa la idea y quieres que te detalle más, me lo dices, podremos buscar el modo más simple de hacerlo.
Si no te interesa, me lo dices también, para descartarte la pregunta y que siga pendiente para el tablón publico u otros expertos.
Respuesta
1
Pues no se, ahora mismo lo único que se me ocurre que podrías utilizar una función con este código:
dim frm as object
dim con as control
set frm=me.form
for each con in frm.controls
if con.controltype=actextbox then con.backcolor=vbred
next con
Pero bueno esta función la deberías de llamar tanto al entrar como al salir de cada cuadro de texto, por tanto no creo que te ahora demasiado trabajo, lo único lo de escribir el nombre del control, aunque esto lo podrías controlar con
Screen. ActiveControl. Name
Bueno en definitiva que no se como hacerlo de forma automática ya que no se como se podría controlar como saber cuando se cambia de control en un formulario.
Respuesta
1
Quieres hacer una prueba, esto funciona por que ya lo he probado infinitas veces.
Crea un botón y en el evento "Al hacer click" copia lo siguiente:
Dim frm As Form
Set frm = Forms!formulario1
Call ModControles(frm)
Al final de tu modulo de clase copia esto:
Sub ModControles(frm As Form)
Dim ctl As Control
For Each ctl In frm.Controls
With ctl
Select Case .ControlType
Case acTextBox
If .BackColor = 16777215 Then
.BackColor = 255
.ForeColor = 65535
Else
.BackColor = 16777215
.ForeColor = 0
End If
End Select
End With
Next ctl
End Sub
Lo que esto hace es justamente cambiar el color de fondo a rojo y el texto a amarillo.
Nota que el ejemplo incluye una función de selección CASE, lo que significa que eventualmente podrías definir varios casos en los que realice distintas cosas.
Este ejemplo esta hecho para controles text, pero podrían ser cuadros, combinados, de lista, etc.
Nota más importante aún, este procedimiento SUB lo puedes crear en un módulo estándar y llamarlo desde cualquier formulario, así no tienes que copiar este código en cada módulo de clase donde se necesite.
Respuesta
1
Perdona por el retraso. Puedes basarte en esta función para resolver tu problema:
'********************
Sub EstablecerPropiedadesCuadroTexto(frm As Form)
Dim ctl As Control
' Enumerar la colección Controles (Controls).
For Each ctl In frm.Controls
' Comprobar si el control es un cuadro de texto.
If ctl.ControlType = acTextBox Then
' Establecer las propiedades del control.
With ctl
.backcolor=rgb(0,0,0)
End With
End If
Next ctl
End Sub
'********************

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas