mi situación es la siguiente: Estoy trabajando con Visual C# 2010 Express el desarrollo de una aplicación de Windows Forms. Cuando el usuario inicie sesión, construya dinámicamente un menú con opciones cargadas desde una tabla de base de datos. En esa tabla, guardo la identificación, el nombre de la opción y el nombre del formulario.C# Reflexión: una instancia de un objeto con nombre de la clase cadena
Por lo tanto, suponer que en mi proyecto tengo un formulario denominado Contabilidad, tiene Contabilidad.cs que es la clase principal, por lo que si quiero crear una nueva forma y mostrar que puedo hacer esto:
Contabilidad frmConta = new Contabilidad();
frmConta.Show();
Pero en este caso, debido a que las opciones del menú están almacenadas en la base de datos, en la base de datos solo tengo la cadena "Contabilidad". Entonces, quiero usar la reflexión de C# para crear una instancia de Contabilidad o cualquier otra forma solo con el nombre de clase en formato de cadena.
En primer lugar he intentado esto:
Form frmConta= (Form)Activator.CreateInstance(null, "Contabilidad").Unwrap();
porque he leído en una pregunta StackOverflow que si yo uso nula Me refiero al montaje actual (mis formas están todos en el mismo proyecto), pero me sale este mensaje:
Could not load type 'Contabilidad' from assembly 'AccountingSA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
la definición de clase es la siguiente:
namespace AccountingSA {
public partial class Contabilidad : Form
{
public Contabilidad()
{
InitializeComponent();
} ...
también probé esto:
Assembly assembly = Assembly.Load("AccountingSA");
Type t = assembly.GetType("Contabilidad");
Form frmConta = (Form)Activator.CreateInstance(t);
pero consigo ArgumentNullException con este mensaje:
Value cannot be null. Parameter name: type
Debido a la variable t es nulo.
Lo que estoy mal? Gracias por adelantado.