我使用以下代码在运行时调用并打开表单(来自此论坛)。表单的名称取决于用户输入:
// 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);
}
任何帮助将不胜感激。
答案 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
的其他重载版本。