方法,用于创建窗体的新实例

本文关键字:实例 新实例 用于 创建 窗体 方法 | 更新日期: 2023-09-27 18:16:33

我是一个编程初学者。我尝试创建具有多种形式的小应用程序。我想解释一下,如何通过使用方法创建这个表单的实例来打开表单。

我实际上有这个:

    private void firtsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if(myForm == null)
        {
            myForm = new MyForm();
            myForm.MdiParent = this;
            myForm.FormClosing += myFormForm_FormClosing;
            myForm.Show();
        }
        else
        {
            myForm.Activate();
        }
    }
    void myForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        myForm = null;
    }

我想处理许多工具条菜单,我不想在他们每个人写代码,所以我想写一些方法打开任何形式与另一种类型

方法,用于创建窗体的新实例

这允许您最多显示每个类的一个MDI子窗体:

// Stores references to form of each type:
private Dictionary<Type, Form> _childWindows = new Dictionary<Type, Form>();
private Form ShowForm<T>() where T : Form
{
    var formType = typeof(T);
    // If we already display a form of given type -> activate it
    if (_childWindows.ContainsKey(formType))
    {
        var form = _childWindows[formType];
        form.Activate();
        return form;
    }
    else
    {
        // Else create a new form instance
        var form = (Form) Activator.CreateInstance(typeof(T));
        form.MdiParent = this;
        form.FormClosing += myForm_FormClosing;
        _childWindows[formType] = form;
        form.Show();
        return form;
    }
}
void myForm_FormClosing(object sender, FormClosingEventArgs e)
{
    _childWindows.Remove(sender.GetType());
}

用法:

private void firtsToolStripMenuItem_Click(object sender, EventArgs e)
{
   var form = ShowForm<MyForm>();
}

创建一个方法,如果传入的表单尚未实例化,该方法将创建新的实例。

private ShowForm<T>(T form) where T : Form
{
    if(form == null)
    {
        form = Activator.CreateInstance(typeof(T));
        form.MdiParent = this;
        form.FormClosing += myFormForm_FormClosing;
        form.Show(); 
    }
    else
    {
        form.Activate();
    }      
}