我正在使用Visual Studio 2017和最新版本的C#创建WinForm应用程序。我有一个方法,可以根据其名称创建表单的新实例,然后向用户显示该表单。请在下面查看我的示例方法;
public void openForm(String name_of_form_to_open, bool dialog = false)
{
var new_form = Activator.CreateInstance(Type.GetType("WatchApplication.Forms." + name_of_form_to_open)) as Form;
if (Application.OpenForms[name_of_form_to_open] == null)
{
if (dialog)
{
new_form.ShowDialog();
}
else
{
new_form.Show();
}
}
else
{
new_form.BringToFront();
}
}
然后打开一个新的表单实例(如果尚未打开),我会打电话给
openForm("the_name_of_the_form_to_open");
问题是,这仅适用于某些表单。其他人抛出空异常错误,尽管事实是存在这些表格,它们的拼写正确,并且与正在使用的表格位于同一目录中。任何人都知道为什么某些表单会打开而其他表单会引发异常吗?
非常感谢
答案 0 :(得分:0)
您的方法过于复杂,请使其更简单:
public void openForm(Form name_of_form_to_open, bool dialog = false)
{
var new_form = new name_of_form_to_open(*any args if needed*);
if (dialog)
{
new_form.ShowDialog();
}
else
{
new_form.Show();
}
}
然后将其用于:
openForm(FormName, true); # For a modal form.
openForm(FormName, false) # For a normal dialog.
答案 1 :(得分:-1)
好的,所以这里的问题是我某些表单上的名称空间不正确。我已经将它们移到解决方案资源管理器中的一个名为 forms 的子文件夹中,而没有更新名称空间以反映此更改。
上面提到的某些人,使用typeof是行不通的。现在,我已经修复了其他错误,而且效果很好。这也是这里公认的答案;