2013-04-12 1 views
0

Я пытаюсь открыть формы, которые динамически привязаны к menustrip.динамически открывать существующую форму, используя строку в C#

Вот мой код:

Форма frm;

string formName =((ToolStripMenuItem)sender).Text; 
formName = Assembly.GetEntryAssembly().GetName().Name + "." + formName; 

Type type = Type.GetType(formName); 
frm = (Form)Activator.CreateInstance(type);   

frm.Show(); 

Здесь проблема. Я получаю значение null. Пожалуйста, помогите мне в этой задаче.

+0

Вы должны убедиться, что 'formName' правильно (она должна быть полное имя типа, т. е. если вам нужна строка, вы должны передать 'System.String'), тогда ваш код будет работать – Alex

+0

Я бы предложил интерфейс или реализацию делегата. – IamStalker

ответ

0

Вы смешиваете имя сборки() и пространство имен.

Вам необходимо найти настоящее полное имя класса. Если вы знаете пространство имен (т. Е. Пространство имен всегда одно и то же для всех форм), вы можете просто жестко его закодировать. Другим решением было бы использовать отражение для перечисления всех типов в сборке GetEntryAssembly, а затем проверить, представляет ли тип форму с заданным именем.

0

Если вы не знаете полное имя, вы можете перебирать типы в сборке и найти тот, в котором вы заинтересованы.

var q = from t in Assembly.GetExecutingAssembly().GetTypes() 
     where t.IsClass && t.Name.Equals(formname) && t.IsSubclassOf(typeof(Form)) 
     select t; 
Смежные вопросы