Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: erbuson en Abril 01, 2010, 07:56:12 am
-
Hola, tengo un problema al que estoy intentado dar solución y tengo una idea pero me gustaría que algun experto me indicara si estoy haciendo una tonteria y en este caso que debo cambiar.
El problema es es siguiente, varios formularios de mi proyecto pueden llamarse entre si y hasta aquí está todo controlado, lo que ocurre es que quisiera que el formulario que ha sido llamado, una vez que se cierra devuelva el control al que lo llamó o sea, supongamos que tengo los formularios:
Maestro, Extracto, Diario
Diario llama a Maestro para dar una cuenta de Alta, entonces Maestro debe devolver el control a Diario.
Diario llama a Extracto para consultar movimientos, entonces Extracto debe devolver el control a Diario.
Pero, y ahí esta el pero, si Diario llama a Maestro para dar un Alta y desde Maestro llamo a Extracto para consultar saldos, Extracto debe devolver el control a Maestro y posteriormente Maestro debe devolverlo a Diario.
Se me ha ocurrido crear una colección a la que llamo miPila y será una colección de Formularios, siendo el último el que deberá recibir el control y para ello tengo una rutina que añade a la pila y una que devuelve y borra de ésta.
Dim miPila As New Collection
Sub QuienLlama(Formulario As Form)
' Añade a la pila el nombre del formulario que llama, asignando como Key un numero correlativo
miPila.Add Formulario, Str$(miPila.Count)
End Sub
Function QuienLlamo() As Object
' Devuelve el nombre del último formulario que llamó y lo elimina
QuienLlamo = miPila.Item(Str$(miPila.Count - 1))
miPila.Remove (Str$(miPila.Count - 1))
End Function
' A raiz de esto deberia hacer lo siguiente mas o menos
Call QuienLlama(Diario)
Maestro.Show
Call QuienLlama(Maestro)
Extracto.Show
Así antes de salir ejecuto QuienLlamo.Show y supuestamente creo que debería funcionar.
Se que lo mejor es probarlo ya que tampoco es muy complicado pero mi duda está en si al añadir elementos a la coleccion estoy llevando a la misma el formulario con su contenido y estos saturando la memoria o si lo de la coleccion no es mas que una digamos manera de tener las cosas ordenadas.
Gracias
Por cierto, soy incapaz de insertar código en el mensaje, ¿ podeis indicarme como se hace ? Gracias
-
Me autorespondo y aclara una parte, ya que he modificado la descarga de la Pila
Function QuienLlamo(Optional Remove As Boolean = True) As Form
' Devuelve el nombre del último formulario que llamó
' Opcionalmente se puede pedir el nombre, sin eliminar de la coleccion. Para Maximizar
Set QuienLlamo = miPila.Item(Str$(miPila.Count - 1))
If Remove Then miPila.Remove (Str$(miPila.Count - 1))
End Function
El sistema funciona perfectamente, mi única duda en este momento es si afecta a los recursos del sistema por lo comentado anteriormente, que no se como averiguarlo.
-
no entiendo a ue te referis con "devolver el control" pero imagino que estas hablando de formularios modales... por lo que pienso que con usar vbmodal seria suficiente para lo que queres hacer.. pero bueno no estoy seguro.
-
Hola, he recibido en otro foro una respuesta que me tranquiliza y es la siguiente:
No saturarás el sistema, lo que estás añadiendo a la colección es una referencia al formulario, no se hace una 'copia' del formulario, así que por eso tranquilo.
Aclarando la pregunta, no se trata de formularios modales ya que sólo en determinadas ocasiones me gusta utilizarlos, puesto que con la base a la que estoy desarrollando mi programa de contabilidad considero que 'frenan' mis ideas.
Saludos