如何按字符串名称打开表单?
如果我从文本框中获取字符串值,并且我的表单名称与文本框中的字符串值相同。 如何打开此表格?
string formAAA = textbox.text; // "AAA"
我需要打开’AAA’表格;
string formtocall = "blabla"; var form = Activator.CreateInstance(Type.GetType("namespace." + formtocall)) as Form; form.ShowDialog();
你需要使用reflection。
打开表单正在创建它的实例,您需要创建实例并显示它。
您将需要表单的名称及其名称空间。
string formName= textbox.Text; string namespaceName = "MyNamespace.MyInternalNamespace";
然后使用激活器创建实例。
var frm= Activator.CreateInstance(namespaceName, formName) as Form;
然后你只需要显示表格
frm.show();
使用以下:
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(); } } }