如果我从文本框中获取字符串值,并且我的表单名称与文本框中的字符串值相同。 如何打开此表单?
string formAAA = textbox.text; // "AAA"
我需要打开表格' AAA';
答案 0 :(得分:3)
MinDate
答案 1 :(得分:0)
你需要使用反射。
打开表单正在创建它的实例,您需要创建实例并显示它。
您将需要表单的名称及其名称空间。
string formName= textbox.Text;
string namespaceName = "MyNamespace.MyInternalNamespace";
然后使用激活器创建实例。
var frm= Activator.CreateInstance(namespaceName, formName) as Form;
然后你只需要显示表格
frm.show();
答案 2 :(得分:0)
使用以下:
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
{
return assembly.GetTypes().Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal)).ToArray();
}
private void Form1_Load(object sender, EventArgs e)
{
//Get all types
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "loopClasses");
for (int i = 0; i < typelist.Length; i++)
{//Loop on them
if (typelist[i].BaseType == typeof(System.Windows.Forms.Form) && typelist[i].Name == textbox.text)
{//if windows form and the name is match
//Create Instance and show it
Form tmp =(Form) Activator.CreateInstance(typelist[i]);
//MessageBox.Show(typelist[i].Name);
tmp.Show();
}
}
}
答案 3 :(得分:0)
您还可以使用此:
Form GetFormByName(string name)
{
System.Reflection.Assembly myAssembly =System.Reflection.Assembly.GetExecutingAssembly();
foreach(Type type in myAssembly.GetTypes())
{
if (type.BaseType!=null&& type.BaseType.FullName == "System.Windows.Forms.Form")
{
if (type.FullName == name)
{
var form = Activator.CreateInstance(Type.GetType(name)) as Form;
return form;
}
}
}
return null;
}