Access - Problemas con subformularios

 
Vista:

Problemas con subformularios

Publicado por blas (143 intervenciones) el 23/09/2011 09:18:57
Hola a todos.

He tomado para mi DB un ejemplo de Emilio SANCHA sobre ocultar las etiquetas bajo los campos de texto para sacar mas espacio a los formularios, una gran idea por cierto. El funcionamiento es tan sencillo como poner la etiqueta en el mismo campo de texto, cuando escribes desaparece la etiqueta y queda el texto escrito, fantastico. El caso es, que en los formularios funciona muy bien, pero cuando este mismo formulario pasa a ser subformulario, al escribir y salir del campo se ve el texto escrito y sobre puesto encima el nombre de la etiqueta. Vuelve a funcionar al cambiar de registro, es decir cuando pasa al registro siguiente u anterior desaparecen los nombres de la etiqueta quedando solo el texto del campo como debe ser. He leido mucho sobre los problemas de los subformularios y creo que tiene algo que ver con la actualización. Si alguien me puede ayudar. Muchas gracias. Pongo los códigos que se aplican:

En las Propiedades del formulario evento "Al activar registro":

Private Sub Form_Current()
Dim ctrl As Control
' recorro los controles del formulario
For Each ctrl In Me.Controls
' si el control es un cuadro de texto
If ctrl.ControlType = acTextBox Then
' si no está vacío
If Not ctrl.Value = vbNullString Then
' fondo normal
ctrl.BackStyle = 1
Else
' fondo transparente
ctrl.BackStyle = 0
End If
End If
Next ctrl
'Me.Texto1.SetFocus
End Sub

En el evento "Al cargar":

Private Sub Form_Load()
Dim ctrl As Control
' recorro los controles del formulario
For Each ctrl In Me.Controls
' si el control es un cuadro de texto
If ctrl.ControlType = acTextBox Then
' le aplico la función TrasActualizar
ctrl.AfterUpdate = "=TrasActualizar('" & Me.Name & "', '" & ctrl.Name & "')"
End If
Next ctrl
DoCmd.GoToRecord , , acNewRec
End Sub

En el campo de texto de cada control en el evento "Después de actualizar" :

= TrasActualizar («strFormulario»; «strControl»)

Que abre el modulo general

Modulo general:

Public Function TrasActualizar(strFormulario As String, strControl As String)
Dim frmFormulario As Form

Set frmFormulario = Forms(strFormulario)

If Not Nz(frmFormulario.Controls(strControl), vbNullString) = vbNullString Then
' fondo normal
frmFormulario.Controls(strControl).BackStyle = 1
Else
' fondo transparente
frmFormulario.Controls(strControl).BackStyle = 0
End If

Set frmFormulario = Nothing
End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder