Como llamar a un formulario solo con el nombre en vb.net

Si desean realizar una aplicación dinámica de seguro se toparan con el problema de que no pueden instanciar sus formularios sin declararlos previamente uno a uno de la siguiente manera:

Dim formCliente as new FormCliente()   
formCliente.Show() 

Dim formProveedor as new FormProveedor()   
formProveedor.Show() 

Dim formEmpresa as new FormEmpresa()   
formEmpresa.Show() 

Si lo que desean es agregarle un toque mas dinámico y levantar cualquier formulario de nuestra aplicación tan solo indicando el nombre de estos (este nombre puede ser guardado en una base de datos por ejemplo). De seguro esta función resolverá su problema.


Public Sub AbrirFormulario(ByVal nameForm As String)

  Dim proyecto As String 

  Try
    proyecto = Application.ProductName //Si conocen el nombre del proyecto pueden agregarlo directamente

    Dim frm As Form = DirectCast(Activator.CreateInstance( _
                   Type.GetType(proyecto + "." + nameForm)),Form)

    frm.ShowDialog() 
    //Pueden variar dependiendo del uso entre modal y no modal
    // (ShowDialog() o Show())

   Catch ex As Exception

    MessageBox.Show(ex.Message)

   End Try

End Sub

 

Espero sea de su utilidad

También te podría gustar...

13 Respuestas

  1. Gonzalo Malagón Pérez dice:

    Hola, buen día, inicialmente te agradezco el aporte, excelente, el motivo de la consulta es el siguiente, en una tabla de base de datos, tengo el nombre del formulario y una especie de permisos para realizar eventos, son bastantes formularios, por eso es genial tu aporte, ahora como debiera hacer?
    por ejemplo:
    frm.nombredelboton.enabled=tabla(0)(7) ‘esto según la consulta a la base de datos

    Cabe indicar que soy primiparo, estoy iniciando en visual basic 2017

  2. EBERT dice:

    tengo la siguiente consulta, he llamado a un formulario dinamicamente en VB -> form1,
    la cuestión es que en el form1 tengo un textbox y un boton que llama a un form2 y en el form2 tengo un DataGridView cargado con información;
    al dar doble clic en alguna fila del datagridview este deberia pasar la información al textbox del form1.
    Nota: si al form1 no lo llamo de forma dinamica me corre normal, pero el problema es cuando lo llamo de forma dinamica no pasa la informacion de la fila seleccionada del form1 al textbox del form2.
    ¿Cómo hago para pasar información del form2 al form1 que fue llamado dinámicamente?.

    • Estimado, no entiendo para que lo haces de manera dinamica si son formularios conocidos. En este tipo de casos es más sencillo hacerlo de forma tradicional y si quieres compartir información entre formularios puedes utilizar eventos personalizados.

      Saludos

  3. Juan Leguizamon dice:

    ¡Gracias!

  4. Daniel dice:

    Hola, suponiendo que tengo abierto dinámicamente un formulario del cual tengo el nombre. Necesito leer sus propiedades; como puedo acceder ??? es decir, con el nombre guardado en una variable string debo leer la instancia del formulario y acceder a sus propiedades; mil gracias si me pueden ayudar

    • Cualquier propiedad del formulario abierto la puedes acceder desde la variable frm seguida de un . ejemplo frm.Name = nombre formulario:
      Podrás acceder a cualquier datos de un formulario normal nombre, tamaño, letras, estilos, ahora si quieres acceder a propiedades personalizadas por ti, es un poco mas complejo ya que este método dinámico se utiliza básicamente para abrir formularios, no para otra cosa. Saludos

      • Jaime dice:

        ejemplo: el formulario que abrimos contiene una table. al poner:

        frm.TablaBindingSource.RemoveCurrent()

        me da un error porque indica que el TablaBindingSource no es miembro del formulario frm.

        Help!!

        • Este tipo de llamadas dinámicas solo puede llamar a métodos genéricos de un Form, si necesitas llamar al método tienes que instanciarlo normalmente TuForm form = new TuForm(); form.TablaBindingSource.RemoveCurrent(); o bien mediante un cast al formulario dinamico dada una condición, como por ejemplo el nombre if(form.Name == ‘TuForm’){ TuForm frm = (TuForm) form;}.

          Saludos

  5. Joshyba dice:

    Haaa pero si quiero agregar informacion a ese formulario abierto, como se haria, se puede saber cual es la instancia de ese formulario?

    • Este método solo te permitirá cambiar los datos que formen parte de las propiedades de un Form.

       
      Dim frm As Form = DirectCast(Activator.CreateInstance( _  
      Type.GetType(proyecto + "." + nameForm)),Form)  
      

      Por ejemplo si quieres cambiar el text solo debes poner

       
      frm.Text = "Formulario Nuevo"
      

      Que dato en particular quieres modificar??

  6. Juan José dice:

    Barbaro !!!
    Justo lo que andaba buscando !

Deja una respuesta

Tu dirección de correo electrónico no será publicada.