Modificar forms Padres desde sus Hijos creados de forma dinámica
Fecha: 31/05/2003 (14/Jul/2003)
Autor: Germán Perrone - [email protected]
Muchas veces se necesitan crear instancias de form dinámicamente (de la forma dim f as new Form1) y a su vez, crear instancias hijas del mismo. En el siguiente ejemplo voy a mostrar cómo desde cualquier instancia hija creada se pueden modificar los valores de su form padre y no de cualquier otra instancia del mismo form padre. Básicamente se utiliza la colección Forms para detectar el form padre (ésto lo realiza él mismo antes de llamar al hijo). En esta colección solo detectaremos su índice que pasará como parámetro a una función preestablecida del form hijo. Una vez que el form hijo detectó el índice, asigna con el mismo la dirección del form padre a una variable Form local para su futura modificación. En nuestro ejemplo existen 3 forms. Form1 contendrá un Command1 que llamará a una instancia de Form2. Form2 contendrá un Command1 que llamará a la instancia del Form3 y un Text1 que será modificado por este último. Form3 contendrá un Command1 que llamará a un InputBox que modificará el Text1 de Form2.
Veamos cómo funciona el reconocimiento del índice en Form2:
Private Sub Command1_Click() ' Botón que llama al form hijo Dim i As Integer Dim a As Boolean Dim f As New Form3 a = False i = 0 ' While i < Forms.Count And a = False ' Recorre la colección Forms If Forms(i) Is Me Then ' para ubicar el índice de la instancia f.Asignacion(i) ' de Form2 actual y llama a función de Form3 a = True End If Wend f.Show End SubAhora detallaremos la función Asignacion en el Form3:
Dim frmPadre As Form ' Enlace a su único form padre y va como variable local del Form3 Function Asignacion (i As Integer) Set frmPadre = Forms(i) ' Hace la asignación End FunctionHay un margen de error muy pequeño pero que debe tenerse en cuenta: cuando Form2 llama a la función de Form3 y pasa su índice, Form3 debe procesar esta información antes de que se cierre algún form, ya que varían todos los índices de la colección Forms y puede asignar cualquier form a la variable local.
Este código es optimizable. Con esto quiero decir que aquí sólo se muestra cómo modificar a un form padre creado en base a una instancia, pero pueden existir errores en la ejecución como el antes mencionado. VB no permite pasar como parametro a "Me", es decir Asignacion(Me), pasando directamente el form, por eso se trabaja con la colección Forms.
Fichero con el código de ejemplo (PadreHijo.zip - Tamaño: 2.05 KB)