Ocultar-mostrar varios campos en formulario según valor

Estoy construyendo un formulario bastante extenso. El caso es que un grupo de campos solo debo rellenarlo si en un campo "EQUIPO" (cuadro combinado) selecciono A. Si selecciono B rellenaré otro grupo de campos (por lo que no me hace falta ver los campos de A; y viceversa).

Me gustaría mostrar u ocultar los campos según la selección de la lista EQUIPO, pero si fuese posible "ocupar" el espacio de los campos que oculte (para no tener un frontón en medio del formulario).

Había pensado poner los grupos de campos en un subformulario para hacerlos autoextensibles o autocomprimibles, pero no se seguro si iría bien; luego tendría que mostrar-ocultar los subformularios según el valor del campo, pero no sé cómo hacerlo, ni en qué evento debería hacerlo...

¿Alguien me ilumina?

Respuesta
1

¿Podrías poner una imagen del formulario?

Sí... todo depende del campo EQUIPO: donde selecciono CONTADOR o CONVERSOR.

Te aconsejaría que si puedes lo hagas, como bien dices, con subformularios. Se puede hacer tal como está ahora, pero sería horrible escribir todo el código. Imagínate que tengo un formulario, donde tengo un combinado para elegir.

Supongamos que elijo Compra, el formulario me queda

Por el contrario, si hubiera elegido Ventas

En este caso, en el evento Después de actualizar del combinado, llamado Elegir, le tengo puesto

Private Sub Elegir_AfterUpdate()
Select Case Elegir
Case Is = "Venta"
Me.DetalleCompra.Visible = False
Me.DetalleCompra.Top = 6 * 570
Me.DetalleVenta.Top = 1.6 * 570
Case Is = "Compra"
Me.DetalleVenta.Visible = False
End Select
End Sub

Es decir, que si elijo Compras, sólo oculte el subformulario DetalleVenta. Por el contrario, si elijo Ventas, que oculte el subformulario DetalleCompra, que lo "traslade" al centímetro 6 y que "suba" el subformulario Detalleventa al centímetro 1,6.

Dejo para tí que "jueges" con las dimensiones.

2 respuestas más de otros expertos

Respuesta
1

Si solo se trata de plantear alternativas:

En lugar de grupos de campos: formularios
Una opción para trabajar con ellos es utilizar pestañas
Otra opción: que los formularios estén superpuestos y para hacer la ilusión de que es el mismo con diferente contenido, el botón que los intercambia (en ambos formularios deberá estar en la misma ubicación) hace activo al otro y tras ello se auto-oculta (en ese orden).

¡Gracias!

Estoy en ello... siguiendo las indicaciones del compañero JULIÁN GONZÁLEZ CABARCOS :)

Posicionar objetos es sencillo (acostumbro a utilizar su medida real twips)

Los formularios tienen secciones, la básica es la sección cero (0) que merma en función de que se utilice la cabecera o pie, esta condición se cumple también con los formularios en función de subformularios.

Para el primer subformulario (Formulario_1) se da por supuesto que sus coordenadas son la (0,0)
TOP = 0  //  Left =0

Si se desea posicionar el Formulario_2 (debajo) disponemos de propiedad InsideHeight (su altura)
Top =   [objeto formulario_1].InsideHeight  //  Left =0

Si se desea posicionar a su derecha podemos utilizar su propiedad InsideWidth (su anchura)
Top =   0  // Left =  [objeto formulario_1].InsideWidth

Si alguien se pregunta porque utilizo esta medida : por ser mas precisa y ser la real.

(Me encanto crear formularios y sobre todo informes de forma dinámica pues se logran efectos llamativos)

Respuesta
1

Cuando son muchos campos puede utilizar el control de pestaña.

Cree un formulario y adicione el cuadro combinado y el control de pestaña.

Asigne un nombre para cada pestaña. En este ejemplo les he asignado el nombre carpetaA y carpetaB. En cada carpeta he puesto 3 controles como muestra la imagen. Esto me permite hacerlas visibles o ocultar de acuerdo con el contenido del cuadro combinado.

Observe la imagen. Voy a elegir

Y obtengo

Se oculta la pestaña carpetaA.

CÓDIGO DEL CUADRO COMBINADO

Private Sub cboElegir_AfterUpdate()
If Me.cboElegir = "A" Then
  Me.carpetaA.Visible = True
  Me.carpetaB.Visible = False
Else
  Me.carpetaA.Visible = False
  Me.carpetaB.Visible = True
End If
End Sub

Otra alternativa es con base en un nombre inicial para los controles, por ejemplo, Acontrol1, Actontrol2, Bcontrol1, Bcontrol2... recorrer los controles y de acuerdo con el primer carácter si es igual a "A" o "B" ocultarlos, hay más opciones.

Ni se le ocurra trabar con subformularios, por estética, confusión y más objetos que hacen pesada la base de datos.

¡Gracias!

Tu sugerencia de las pestañas es buena (ya las uso en otras partes), pero no me convence pensando en las personas que van a tener que usar la bbdd.

De entrada creo que probaré lo de los subformularios que han comentado otros compañeros... a ver que será...

Gracias 1000^1000

Ya usted es quien decide tratamos de ofrecerle la mejor opción con base en la experiencia, pero tenga presente entre menos objetos tenga la base de datos, especialmente formularios, no se crece el tamaño de la base de datos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas