У меня есть метод создания формы и пользовательского элемента управления:
public static void Add(Form it, string title, string type, string content, string mode)
{
string fullname = Assembly.GetExecutingAssembly().GetName().Name + "." + type;
Type className = Type.GetType(fullname, false, true);
var formObject = Activator.CreateInstance(className) as Form;
string contentFullname = Assembly.GetExecutingAssembly().GetName().Name + ".Data.content." + content;
Type contentName = Type.GetType(contentFullname, false, true);
var contentObject = Activator.CreateInstance(contentName) as UserControl;
if (formObject != null)
{
if (mode == "Show")
{
it.Hide();
formObject.Text = title;
formObject.Controls.Add(contentObject);
formObject.Show();
}
else if (mode == "Dialog")
{
formObject.Text = title;
formObject.Controls.Add(contentObject);
formObject.ShowDialog();
}
}
}
Я инициализирую метод:
Function.Add(Controls.Owner.FindForm(), "Заголовок", "Form_default", "UserControl_main", "Show");
При отладки появляется ошибка:
"Значение не может быть неопределенным.\r\nИмя параметра: type"
В строке:
var formObject = Activator.CreateInstance(className) as Form;
При отладки, нижеперечисленные переменные имеют значения null.
Type classname
var formObject
То есть GetType не может найти нужный мне тип. Но дело в том, что этот метод работал в другом проекте, хотя отличия в проектах нулевые. P.S. ...Проект новый создал из-за сломанной БД и бесконечных ошибок из-за неё. Так же нижепредставленный код подсвечивается с надписью: Представляет окно или диалоговое окно, которое составляет пользовательский интерфейс приложения. Используйте сопоставление шаблонов. IDE0019 - Сопоставление шаблонов
var formObject
Помогите решить проблему.
Проблема была в том, что классы наподобие Form_default находились в неправильном пространстве имён (из-за переноса из другого проекта). Из-за этого определение пространства имён через Assembly.GetExecutingAssembly().GetName().Name не работало.
Это приводило к тому, что тип не находился, и className равнялось null, что и было причиной дальнейших ошибок.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости