Моя ситуация такова: я работаю с Visual C # 2010 Express над разработкой приложения для Windows Forms.Когда пользователь входит в систему, динамически строит меню с опциями, загруженными из таблицы базы данных.В этой таблице я сохраняю идентификатор, имя опции и имя формы.
Итак, предположим, что в моем проекте у меня есть форма с именем Contabilidad, у нее есть Contabilidad.cs, который является основным классом, поэтому, если я хочу создатьНовая форма и показать это я делаю это:
Contabilidad frmConta = new Contabilidad();
frmConta.Show();
Но в этом случае, поскольку пункты меню хранятся в базе данных, в базе данных у меня есть только строка "Contabilidad".Итак, я хочу использовать отражение C # для создания экземпляра Contabilidad или любой другой формы только с именем класса в строковом формате.
Сначала я попробовал это:
Form frmConta= (Form)Activator.CreateInstance(null, "Contabilidad").Unwrap();
Потому что я читал ввопрос StackOverflow о том, что если я использую значение null, я имею в виду текущую сборку (все мои формы находятся в одном проекте), но я получаю это сообщение:
Could not load type 'Contabilidad' from assembly 'AccountingSA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Определение класса следующее:
namespace AccountingSA {
public partial class Contabilidad : Form
{
public Contabilidad()
{
InitializeComponent();
} ...
Также я попробовал это:
Assembly assembly = Assembly.Load("AccountingSA");
Type t = assembly.GetType("Contabilidad");
Form frmConta = (Form)Activator.CreateInstance(t);
Но я получаю ArgumentNullException с этим сообщением:
Value cannot be null. Parameter name: type
Поскольку переменная t равна нулю.
Что я делаю не так?Заранее спасибо.