La Web del Programador: Comunidad de Programadores
 
    Pregunta:  58755 - LLAMAR FORMULARIO LEYENDO BASE DE DATOS
Autor:  Jostjasa
Hola a todos, mi pregunta es la siguiente, estoy realizando una aplicación en la en la que he creado unas opciones de menu de manera dinámica me refiero a que cargo unos menus leyendo la base de datos, son mas o meos unos seis menus padres y cada menu tiene digamos de a 7 menus hijos, cada menu hijo debe hacer referencia a un formulario, mejor dicho cada opcion de menu debe llamar un formulario los cuales ya han sido creados, la base de datos en la que estan guardadas cada opcion de menu tiene un campo en el cual van guardados los nombres de cada uno de los formularios a los que debe hacer referencia cada opcion de menu, estan escritos de la misma manera como reciben el nombre en la aplicación por ejemplo (frm_usuarios"), la pregunta en la cual necesito ayuda es como poder llamar cada formulario haciendo referencia al nombre que esta en la base de datos ya que este identifica al formulario creado, esto para que cada opcion de menu llame pero al formulario asignado en e campo en la base de datos, de antemano muchas gracias.

la tabla en la base de datos es algo asi, cada opcion de menu hace referencia al nombre del formulario creado en la aplicación:

MENU FORMULARIO
ACCESO frm_acceso
USUARIOS frm_usuarios
CLIENTES frm_clientes

Ejemplo. que cuando me cargue el menu y yo quiera por ejemplo darle click sobre la opcon acceso pues ella me lleve a el formulario frm_acceso.

Gracias.............

  Respuesta:  danicuco Rodriguez
Lo que pides es instanciar un objeto dinamicamente. Para ello puedes utilizar el espacio de nombre System.Reflection de .net

Este espacio de nombre contiene clases e interfaces que proporcionan una vista administrada de los campos, los métodos y los tipos cargados, con la posibilidad de crear e invocar tipos dinámicamente.

Es decir, si tienes la .dll (ensamblado) de tu aplicacion puedes buscar tu formulario (que será una clase) e invocarla dinamicamente. Podras buscar tu formulario a traves de su nombre (string) que es lo que tendras guardado en BBDD

Te dejo un metodo que lanza dinamicamente un form,

Parametros de entrada: Formulario Invocador y NameSpace completo del formulario que uiero invocar

Protected Friend Sub AbrirFormulariosReflection(ByVal frmInvocador As System.Windows.Forms.Form, ByVal namespaceCompleto As String)
Try

Dim nbForm() As String = namespaceCompleto.Split("."c)
Dim numeroItems As Integer = namespaceCompleto.Split("."c).Length - 1

Dim f As Form = DirectCast(Type.GetType(namespaceCompleto).InvokeMember(nbForm(numeroItems).ToString(), Reflection.BindingFlags.CreateInstance), Form)

f.Show()


Catch exGeneral As Exception
Auditoria.CrearLogArquitectura(Auditoria.Severidad.Err, exBase)
Throw exBase
End Try
End Sub