Autor Tema: Duda con el objeto Collection  (Leído 2764 veces)

0 Usuarios y 1 Visitante están viendo este tema.

erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Duda con el objeto Collection
« 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




erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Re:Duda con el objeto Collection
« Respuesta #1 en: Abril 01, 2010, 09:49:27 am »
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.

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:Duda con el objeto Collection
« Respuesta #2 en: Abril 01, 2010, 11:12:07 pm »
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.

erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Re:Duda con el objeto Collection
« Respuesta #3 en: Abril 02, 2010, 04:32:00 am »
Hola, he recibido en otro foro una respuesta que me tranquiliza y es la siguiente:

Citar
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