如何按字符串名称打开表单?

时间:2016-05-30 10:06:04

标签: c# winforms

如果我从文本框中获取字符串值,并且我的表单名称与文本框中的字符串值相同。 如何打开此表单?

string formAAA = textbox.text; // "AAA"

我需要打开表格' AAA';

4 个答案:

答案 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;

    }