none
Generar "n" forms a partir del diseño y código de una form RRS feed

  • Pregunta

  • Estoy haciendo un proyecto en el que debo abrir una form nueva cada vez que se presiona un botón...

    He intentado programarlo así: declaro una variable matriz de formularios de acuerdo a un counter (que se aumenta cada vez que se presiona el botón), y luego, igualo esta variable formulario al formulario que tengo como diseño (para que copie los objetos en él, junto con su código). Algo así:

    dim formularios() as Form
    redim preserve formularios(count)
    formularios(count)= FrmDiseño 'FrmDiseño es el formulario del que quiero que se copien las características
    formularios(count).show

    Al hacer esto, abre el formulario con todas las características de FrmDiseño, pero al volver a presionar el botón que acciona este código, el formulario no se abre. He intentado no igualarlo al FrmDiseño, y funciona bien (sin copiar las características, claro), el problema es cuando lo igualo, no puede abrir varios formularios así.

    Les agradecería mucho la ayuda.

    miércoles, 27 de octubre de 2010 18:18

Respuestas

  • hola

    cual seria la razon por la cual necesitas conservar la lista de formularios abiertos ?

    si usas

    Private Sub btnNuevoForm_Click(...)

       Dim frm As New Form1

       frm.Show()

    End Sub

    esto crea varias instancias del formulario

     

    bien si igual quieres guardar esto, sua una lista generica del tipo List(Of  )

    Dim listaForms As New List(Of Form)

    Private Sub btnNuevoForm_Click(...)

       Dim frm As New Form1

       listaForm.Add(frm)

       frm.Show()

    End Sub

    Nota: esto solo funciona si usas VS2005 o superior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Bengalaa jueves, 28 de octubre de 2010 21:03
    miércoles, 27 de octubre de 2010 19:22

Todas las respuestas

  • hola

    cual seria la razon por la cual necesitas conservar la lista de formularios abiertos ?

    si usas

    Private Sub btnNuevoForm_Click(...)

       Dim frm As New Form1

       frm.Show()

    End Sub

    esto crea varias instancias del formulario

     

    bien si igual quieres guardar esto, sua una lista generica del tipo List(Of  )

    Dim listaForms As New List(Of Form)

    Private Sub btnNuevoForm_Click(...)

       Dim frm As New Form1

       listaForm.Add(frm)

       frm.Show()

    End Sub

    Nota: esto solo funciona si usas VS2005 o superior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Bengalaa jueves, 28 de octubre de 2010 21:03
    miércoles, 27 de octubre de 2010 19:22
  • muchas gracias Leandro, funcionó muy bien...

    el código quedó así:

    Public Class Inicio
      Dim forms As New List(Of Form)
    
      Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNuevo.Click
        Dim NuevoFrmPersonaje As New frmPersonaje
        forms.Add(NuevoFrmPersonaje)
        NuevoFrmPersonaje.Show()
      End Sub
    
    End Class
    

    Sobre la lista de formularios abiertos... el proyecto es para llevar el registro de un juego de rol tradicional, y cada formulario abierto es un "personaje"... así que necesito que cada ventana almacene datos en una base de datos según se modifique, y dependiendo del personaje al que se esté modificando.

    Muchas gracias por tu ayuda.

     

    jueves, 28 de octubre de 2010 21:03
  • que tal leandro, tengo una pregunta tonta, yo uso las siguientes lineas para abrir un form desde otro en una aplicacion para windows mobile,

    dim frm as new form1

    frm.show()

    pero ahora como lo cierro???

    he estado usando me.close() y ciertamente desaparece de pantalla pero continua en memoria, y si tengo algun proceso de reloj en el form cerrado este sigue ejecutando y por lo mismo me marca error...

    con que instruccion lo cierro??

    viernes, 18 de febrero de 2011 3:44
  • Hola ,

    has intentado con el método dispose()

    Saludos.

    miércoles, 2 de marzo de 2011 20:41