SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: redram en Lunes 20 de Septiembre de 2004, 17:50

Título: Mostrar Un Formulario A Partir De Un String
Publicado por: redram en Lunes 20 de Septiembre de 2004, 17:50
Necesito mostrar un formulario que no está cargado haciendo referencia a su nombre, por ejemplo:

Dim Nombre as string
Nombre = "Form1"
Nombre.show (esto está mal, pero tendría que ser algo semejante)

Primero probé con Forms(indice).show, pero esto sirve solamente para los formularios que ya han sido cargados; por lo que tendría que tener cargados todos los formularios del proyecto, siendo una solución que no me satisface.
En la ayuda encontré la función "Callbyname", pero ésta no me sirve ya que el primer parámetro que recibe es un objeto, y no su nombre.
Por último, en otro foro me dijeron que cree un procedimiento de esta manera:

Sub AbrirForm(ByRef Formulario as Object)
    Formulario.show
End Sub

Y que lo utilice así:

Dim Nombre as string
Nombre = "Form1"
AbrirForm Nombre

Pero esto tampoco funcionó.

¿Alguien me podría tirar alguna punta sobre esto?

Desde ya estoy agradecido.

Christian
Título: Re: Mostrar Un Formulario A Partir De Un String
Publicado por: DiabloRojo en Lunes 20 de Septiembre de 2004, 21:55
Qué tal redram?
Una forma en la que puedes hacer lo que dices es usando un procedimiento como el siguiente:

Código: Text
  1.  
  2. Private Sub MuestraForm(NomForm As String)
  3.    Dim MiForm As form
  4.    '
  5.    Select Case NomForm
  6.       Case "frmSegundo"
  7.          Set MiForm = New frmSegundo
  8.      
  9.       Case "frmTercero"
  10.          Set MiForm = New frmTercero
  11.      
  12.       Case "frmCuarto"
  13.          Set MiForm = New frmCuarto
  14.     End Select
  15.        
  16.     Load MiForm
  17.     MiForm.Show
  18. End Sub
  19.  
  20.  
  21.  

En el código anterior se supone que existe en el proyecto tres formularios llamados (propiedad name): frmSegundo, frmTercero y frmCuarto. Dependiendo del caso podrías impedir que se cargue un formulario más de una vez.
Espero que te sea de utilidad.

DiabloRojo
Título: Re: Mostrar Un Formulario A Partir De Un String
Publicado por: redram en Lunes 20 de Septiembre de 2004, 22:33
Gracias DiabloRojo por tu respuesta, es una buena solución.  Ahora me gustaría buscar una manera en la que pueda evitar el uso de las estructuras "if" o "select", para así no tener que agregar líneas de código cada vez que agrego un formulario al proyecto.

Gracias de nuevo.

Christian
Título: Re: Mostrar Un Formulario A Partir De Un String
Publicado por: nostromo en Martes 21 de Septiembre de 2004, 15:40
Hola;

No has especificado si esta en un MDI. De ser así, lo único que debes hacer es agregar una instrucción al menú y listo.

Una tarea tan simple, porque te enrollas tanto. La programación es el arte de facilitar las cosas.

Ahora si estos nuevos form son llamados desde otros, debes entonces, crear una dll el cual te permita hacer nexos entre los formularios y avisar al que corresponda, que un nuvo form a de llamar, lo unico que debes cambiar es la dll.

Nos vemos.
Título: Re: Mostrar Un Formulario A Partir De Un String
Publicado por: Juanolo en Martes 21 de Septiembre de 2004, 16:23
Por favor Nostromo, ilumínanos con tu sabiduría!!

He seguido esta consulta y la verdad es que no visualizo la respuesta. Sería un gran alivio para mí el que la publicaras en forma un poco más explícita, pues por tu forma enigmática de redactar, me recuerdas a tu casi homónimo Nostradamus.

Esperamos. :whistling:
Título: Re: Mostrar Un Formulario A Partir De Un String
Publicado por: redram en Martes 21 de Septiembre de 2004, 17:33
Gracias a todos por el tiempo dedicado a mis dudas.  Efectivamente es como dice Nostromo: el formulario es llamado de otro formulario y no de un MDI.  A ver si es correcta la interpretación de la solución:  por cada formulario a llamar tengo que crear una DLL cuyo código haga el Show de dicho Form, entonces cuando tengo que mostrar el formulario indicado me puedo referir al mismo mediante un string que llame a su correspondiente DLL, la cual se encargará de mostrarlo.  ¿Es correcto esto?

Gracias otra vez.

Redram
Título: Re: Mostrar Un Formulario A Partir De Un String
Publicado por: Cyclop en Martes 21 de Septiembre de 2004, 19:59
Y si le colocas en un objeto Collection, y lo vas activando por medio de la Key, pero no se si funka ... ummmh no tengo vb en esta pc.

Pero weno ahi vamos

Código: Text
  1. Dim oVentanas As Collection
  2.  
  3. oVentanas.Add "Ventana1", wForm1
  4. oVentanas.Add "Ventana2", wForm2
  5.  
  6. ' Para activarlas
  7. oVentanas.Item("Ventana1").Show 1
  8.  
  9.  

Jeje ... no se si funcionara ...

Salu2

Cyclop
Título: Re: Mostrar Un Formulario A Partir De Un String
Publicado por: redram en Jueves 23 de Septiembre de 2004, 22:33
Muchas gracias Cyclop, mañana retomo el tema y voy a hacer unas pruebas con tu solución.  Te tengo al tanto con esto en cuanto tenga novedades.

Redram
Título: Re: Mostrar Un Formulario A Partir De Un String
Publicado por: Cyclop en Viernes 24 de Septiembre de 2004, 01:16
:( Siento un poco desilucionarte pero el codigo que puse no funka con Forms, con cualquier otro objeto menos formularios, creo que vas a tener que hacerlo con la estructura SELECT CASE.

Salu2

Cyclop