在运行时将不同的参数传递给未知形式

时间:2017-07-18 12:56:42

标签: c#

我使用以下代码在运行时调用并打开表单(来自此论坛)。表单的名称取决于用户输入:

    // Method
    private void ShowForm(string formToCall)
    {
        Type type = Type.GetType("MyForms." + formToCall);
        var form = Activator.CreateInstance(type) as Form;
    }

    // Call
    ShowForm("StationDef");

现在,有些形式需要参数,有些形式则没有。我可以向ShowForm()方法添加一个带有null默认值的参数,该方法只会在实际传递参数时更改,但我无法弄清楚如何更改ShowForm()代码以接受该情况下的参数。 / p>

这样的事情不起作用:

    private void ShowForm(string formToCall, object arg = null)
    {
        Type type = Type.GetType("MyForms." + formToCall);
        var form = Activator.CreateInstance(type) as Form(arg);
    }

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

也许尝试类似的事情:

private void ShowForm(string formToCall, object[] args)
{
    Type type = Type.GetType("MyForms." + formToCall);
    var form = Activator.CreateInstance(type, args) as Form;
}

你甚至可以让它更“友好”,就像这样

private void ShowForm(string formToCall, params object[] args)

并像这样使用它:

ShowForm("MyForm", arg1, arg2);

答案 1 :(得分:2)

这不起作用,因为as需要类型名称,而不是构造函数调用。

var form = Activator.CreateInstance(type) as Form(arg);

您可以做的是将参数传递给CreateInstance - 方法,如下所示:

var form = Activator.CreateInstance(type, arg) as Form;

我建议你将该arg解析为object,这样就不会干扰CreateInstance的其他重载版本。

Further Reading