Autor Tema: Propiedades personalizadas en formularios  (Leído 94 veces)

Desconectado xavi

  • Administrador
  • Habitual
  • *****
  • Mensajes: 181
Propiedades personalizadas en formularios
« en: Junio 04, 2020, 12:59:43 pm »
Palabras clave: formulario, propiedad, personalizada
Autor: Chea
Extraído de: Hilo de MVP-Access + Teams AUGE

Antecedentes
El usuario Dabellaso pregunta en el foro sobre la posibilidad de asignar propiedades personalizadas a un formulario.

Al mirar la ayuda de Microsoft se lee que solo se pueden definir para los objetos Index, QueryDef y TableDef.

Posteriormente en el Teams de AUGE, Chea nos explicó que si que existe una forma de asignar propiedades a formularios.

Cita de: Chea
En realidad las propiedades no se guardan en los formularios, sino en el objeto correspondiente de la colección AllForms. Se usa de la misma manera que haríamos para una propiedad personalizada de la base de datos, pero haciendo referencia a AllForms("miformulario"). Por ejemplo:
 
Para añadir la propiedad:
CurrentProject.AllForms("frmVisorFacturae").Properties.Add "InterfazFirma", True
 
Para cambiarle el valor:
 
CurrentProject.AllForms("frmVisorFacturae").Properties("InterfazFirma") = blnNewValue
 
Para leer el valor:
UsarInterfazFirma = CurrentProject.AllForms("frmVisorFacturae").Properties("InterfazFirma")
 
Yo lo que hago para que el manejo final me resulte más sencillo es crearme una pareja de procedimientos Property en el módulo del formulario para leer y escribir esa Propiedad.

Al meterlo en los procedimientos Property el resultado es como si usáramos una variable persistente entre sesiones. Le decimos dentro del formulario InterfazFirma = True y ahí se queda hasta que no lo cambiemos aunque cerremos la aplicación.

Horus pregunta: Tengo una duda. Si lo hacemos así, en realidad la propiedad es del formulario en el que la hayamos agregado, no es común para todos los formularios. ¿Es correcto?

Respuesta:En puridad no es una propiedad del formulario, porque no se encuentra en el propio formulario, sino en el AccessObject correspondiente a ese formulario en la colección AllForms. Sin embargo, como esos objetos contienen información de cada formulario, en cierto modo podríamos decir que es una propiedad del formulario. No podemos decir Forms!Miformulario.Mipropiedad, pero sí podemos decir CurrentProject.AllForms("Miformulario").Mipropiedad. Y, efectivamente, la propiedad es para un formulario concreto, no para todos.