1

我在一个解决方案中拥有三个项目(项目 1、项目 2 和项目 3)。
每个项目都有自己的 Windows 窗体 (C#)。我正在项目 3 中编写代码。
我想要在一个列表框中列出所有项目表单名称:
这是我的代码:

private void GetFormNames()
{
    foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
    {
        AppDomain.CurrentDomain.Load(a.FullName);
        foreach (Type t in a.GetTypes())
        {
            if (t.BaseType == typeof(Form))
            {
                Form f = (Form)Activator.CreateInstance(t);
                string FormText = f.Text;
                string FormName = f.Name;
                checkedListBox1.Items.Add("" + FormText + "//" + FormName + "");
            }
        }
    }
}

我收到此错误:

没有为此对象定义无参数构造函数。

4

1 回答 1

0

你打电话时

(Form)Activator.CreateInstance(t);

这意味着类 t 有一个没有参数的构造函数。
您的表单之一不得具有无参数构造函数,这就是您有异常的原因。

您可以在调用 CreateInstance 之前对其进行测试

if (t.BaseType == typeof(Form) && t.GetConstructor(Type.EmptyTypes) != null)

甚至更好:

if (t.BaseType == typeof(Form))
{
    var emptyCtor = t.GetConstructor(Type.EmptyTypes);
    if(emptyCtor != null)
    {
        var f = (Form)emptyCtor.Invoke(new object[]{});
        string FormText = f.Text;
        string FormName = f.Name;
        checkedListBox1.Items.Add("" + FormText + "//" + FormName + "");
    }
}
于 2013-04-12T09:06:50.573 回答