C# 实例化未知类型的已传递表单

C# 实例化未知类型的已传递表单,c#,forms,instantiation,C#,Forms,Instantiation,我的应用程序中有一些表单显示绑定到BindingSource的DataGrid。当我双击一行时,我会显示一个详细信息表单 我有将近50个这样的浏览表单和它们附带的详细信息表单。我希望通过创建一个基本浏览表单并向其传递适当的BindingSource来减少表单和代码的数量。我有这个工作。但是,当我双击一行时,我想实例化与传递的BindingSource相关的详细信息表单 例如,如果用户正在浏览Customer表,则会打开Customer Detail表单,但如果用户正在浏览Job表,则会打开Job

我的应用程序中有一些表单显示绑定到BindingSource的DataGrid。当我双击一行时,我会显示一个详细信息表单

我有将近50个这样的浏览表单和它们附带的详细信息表单。我希望通过创建一个基本浏览表单并向其传递适当的BindingSource来减少表单和代码的数量。我有这个工作。但是,当我双击一行时,我想实例化与传递的BindingSource相关的详细信息表单

例如,如果用户正在浏览Customer表,则会打开Customer Detail表单,但如果用户正在浏览Job表,则会打开Job Detail表单

我可以将通用细节表单作为参数传递,但是如何将传递的表单转换为正确的类型,以便实例化它

我试图避免一个大的switch语句循环选择正确的传递形式。当然有更优雅的方式来实现这一点吗

[编辑] 我的浏览表单代码被实例化如下:

public BaseBrowse(BindingSource dataClass, DevExpress.XtraEditors.XtraForm crudForm)
    {
        InitializeComponent();
        bs   = dataClass;
        crud = ((CRUDEquipment)(crudForm));
    }
因此,我的双击事件是:

    private void gvw_DoubleClick(object sender, EventArgs e)
    {
        Int32 nID = Convert.ToInt32(gvw.GetFocusedRowCellValue("ID"));
        ((CRUDEquipment)(crud)).intID = nID;
        ((CRUDEquipment)(crud)).Show();                
    }

我需要一种方法,用我需要的任何形式的设备来更换这些设备。

也许其中一种会有帮助



public void Instantiate<T>()
{
    var myObject = Activator.CreateInstance<T>();
    // Do something with myObject
}

public void Instantiate(Type t)
{
    var myObject = Activator.CreateInstance(t);
    // Do something with myObject
}

public void Instantiate(string typeName)
{
    var detailType = Type.GetType(typeName);

    if (detailType == null)
    {
        throw new InvalidOperationException("Nice try, but type {0} doesn't compute :)");
    }

    var myObject = Activator.CreateInstance(detailType);
    // Do something with myObject
}


因此,表单配置对象需要两个成员,BindingSource和详细表单的一个类型。