使用表单名称打开表单的新实例

时间:2018-07-11 15:40:04

标签: c# visual-studio winforms

我正在使用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");

问题是,这仅适用于某些表单。其他人抛出空异常错误,尽管事实是存在这些表格,它们的拼写正确,并且与正在使用的表格位于同一目录中。任何人都知道为什么某些表单会打开而其他表单会引发异常吗?

非常感谢

2 个答案:

答案 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是行不通的。现在,我已经修复了其他错误,而且效果很好。这也是这里公认的答案;

Open form with Form Name in winform appliaction