0

我是 C# 的新手,我试图通过一种方法在 MdiContainer 内动态创建表单,方法是在字符串中传递子表单类名的名称。问题是将该字符串称为一个类。

public partial class frmHome : Form
    {
        public frmHome()
        {
            InitializeComponent();
        }

        //Method to show a child form
        public void CreateForm(string formName)
        {
            
            //somehow get the type of the class name passed through formName
            Type protoclass = Type.GetType("BackOffice." + formName);
            
            Object obj = Activator.CreateInstance(protoclass);

            //Before opening a form close all forms opened
            foreach (Form frmChild in this.MdiChildren)
            {
                frmChild.Close();
            }

            //Open form
            protoClass frm = new protoClass(); //Here, I don't know how to call it.

            //frmHome as Parent
            frm.MdiParent = this;

            //show form
            frm.Show();
        }

        private void loginToolStripMenuItem_Click(object sender, EventArgs e)
        {
           //Pass the class name as a string
           createForm(frmLoginAdmin);
        }
4

2 回答 2

1

替换这个:

protoClass frm = new protoClass();

有了这个:

Form frm = (Form)obj;
于 2021-01-04T17:47:18.000 回答
0

通用化它,CreateForm<T>() where T : Form然后你可以创建一个新表单new T()

于 2021-01-04T18:21:13.903 回答