Access - Ya ha pasado esto sin duda. ¡Ayuda plz!

 
Vista:

Ya ha pasado esto sin duda. ¡Ayuda plz!

Publicado por Victor Manuel (101 intervenciones) el 31/03/2007 18:30:15
Tengo un formulario con 4 DTpickers, al cargar el formulario tengo este codigo:

Private Sub Form_Load()
For Each campos In Me.Controls
If TypeOf campos Is TextBox Then
campos.Enabled = False
End If
If TypeOf campos Is CheckBox Then
campos.Enabled = False
End If
If TypeOf campos Is ComboBox Then
campos.Enabled = False
End If
if typeof campos is DTPicker then
campos.enabled=false
If TypeOf campos Is CommandButton Then
campos.Enabled = False
End If
End sub

Este codigo me sirve para todos los campos menos para los DTPickers, osea, que al cargar el formulario todos los campos menos los DTPicker me aparecen deshabilitados.
mi pregunta es ¿Porque para los DTPickers no funciona este codigo y para los demas si funciona?

Ahora despues de que no se pudo con este codigo le agregue este al mismo:

FechaI.Enabled = False
FechaF.Enabled = False
HoraI.Enabled = False
HoraF.Enabled = False

Le agregue para que me aparecieran deshabilitados y vaya si funciono.

Ahora tengo un boton que se llama Alta de registros donde tengo este codigo:

Private Sub CmdNuevo_Click()
For Each campos In Me.Controls
If TypeOf campos Is TextBox Then
campos.Enabled = True
End If
If TypeOf campos Is CheckBox Then
campos.Enabled = True
End If
If TypeOf campos Is ComboBox Then
campos.Enabled = True
End If
If TypeOf campos Is CommandButton Then
campos.Enabled = True
End If
Next campos
DoCmd.GoToRecord , , acNewRec
NumeroReporte.SetFocus
FechaI.Enabled = True
FechaF.Enabled = True
HoraI.Enabled = True
HoraF.Enabled = True
End Sub

Esto para que todos los campos incluyendo los DTpickers se me habiliten y poder capturar registros, pero aqui un problema grande, cuando le doy click en el boton si todo bien con los demas controles pero los DTPickers se me desaparecen y solamente uno me aparece en la ezquina superior izquierda de mi formulario, mi pregunta es:

¿Porque pasa esto con los DTPickers, acaso son tan inestables para trabajar con ellos o que estoy haciendo mal?

Espero alguien me pueda ayudar, ya me duele la cabeza de tanto buscarle, Muchas gracias por su tiempo.
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
Imágen de perfil de Alejandro

Problemas con la habilitación y posición de los DTPickers en un formulario

Publicado por Alejandro (4142 intervenciones) el 07/08/2023 21:41:56
El problema que estás experimentando con los DTPickers en tu formulario puede deberse a cómo interactúan con el evento Form_Load y la forma en que estás manejando la habilitación y deshabilitación de los campos.

Cuando estableces el atributo Enabled de los DTPickers en el evento Form_Load a False, los controles DTPicker se deshabilitan, pero también se cambia su posición a la esquina superior izquierda del formulario. Esto ocurre porque Access ajusta automáticamente la posición de los controles cuando están habilitados o deshabilitados. Al establecer Enabled = False, Access asume que el control ya no es relevante para la interacción del usuario y lo coloca fuera del área de trabajo del formulario.

Una solución para evitar este problema es establecer la propiedad Locked de los DTPickers en lugar de Enabled. Al establecer Locked = True, los controles seguirán estando visibles en su posición original y solo estarán bloqueados para edición, pero los demás campos del formulario estarán habilitados.

Aquí te muestro cómo modificar tu código para que funcione correctamente:

En el evento Form_Load:

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Form_Load()
    For Each campos In Me.Controls
        If TypeOf campos Is TextBox Or TypeOf campos Is CheckBox Or TypeOf campos Is ComboBox Then
            campos.Enabled = False
        End If
        If TypeOf campos Is CommandButton Then
            campos.Enabled = False
        End If
        If TypeOf campos Is DTPicker Then
            campos.Locked = True ' Usa Locked en lugar de Enabled
        End If
    Next campos
End Sub

En el evento CmdNuevo_Click:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CmdNuevo_Click()
    For Each campos In Me.Controls
        If TypeOf campos Is TextBox Or TypeOf campos Is CheckBox Or TypeOf campos Is ComboBox Then
            campos.Enabled = True
        End If
        If TypeOf campos Is CommandButton Then
            campos.Enabled = True
        End If
        If TypeOf campos Is DTPicker Then
            campos.Locked = False ' Usa Locked en lugar de Enabled
        End If
    Next campos
    DoCmd.GoToRecord , , acNewRec
    NumeroReporte.SetFocus
End Sub

Con esta modificación, los DTPickers permanecerán en su lugar y solo estarán bloqueados para edición mientras los demás campos se habilitan y deshabilitan según sea necesario.

Espero que esta solución te sea útil y resuelva los problemas que estás enfrentando con los DTPickers en tu formulario. ¡Buena suerte, Víctor!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar