C# 通过反射获取程序集中所有窗体的文本属性

C# 通过反射获取程序集中所有窗体的文本属性,c#,winforms,reflection,.net-assembly,C#,Winforms,Reflection,.net Assembly,我试图迭代解决方案中的所有程序集,获取所有表单并检索每个表单的文本属性,但我真的不知道如何获取值。这是我的密码: Type formType = typeof(Form); var assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assembly in assemblies) { var types = assembly.GetTypes(); foreac

我试图迭代解决方案中的所有程序集,获取所有表单并检索每个表单的文本属性,但我真的不知道如何获取值。这是我的密码:

 Type formType = typeof(Form);

 var assemblies =
            AppDomain.CurrentDomain.GetAssemblies();

 foreach (var assembly in assemblies)
 {
    var types = assembly.GetTypes();

    foreach (var type in types)
    {
       if (formType.IsAssignableFrom(type))
       {
          var properties = type.GetProperties().Where(x => x.Name == "Text");
       }
    }
 }
我无法检索form text属性的具体值。我也 尝试

但我不知道如何获得当前的课程。有什么想法吗?谢谢大家!

编辑:我也试过了

var frm = (Form)Activator.CreateInstance(type)

但是,如果表单没有无参数构造函数,这将失败。

您可以尝试迭代
应用程序.OpenForms
集合。这将获取应用程序拥有的所有打开的表单。

如果您只需要打开表单的引用,您可以使用。

否则,您需要一些所有表单引用的列表。

我不需要打开表单。我需要我的解决方案中的所有表单,并获得显示其他表单名称的Text属性,然后你必须按照@sulo的建议,使用(例如)某种静态引用列表来保存所有表单实例。但是为什么?我需要编写一个测试,检查解决方案中的所有表单并读取它们的.Text属性。稍后将与正则表达式进行匹配,以检查表单的文本设置是否正确。要访问文本属性,需要创建类的实例。无实例-->无文本属性。因此,如果您正在编写测试用例,那么通过使用
Activator.CreateInstance
,您的思路是正确的。如果您不想或无法创建无参数构造函数,可以尝试
Activator.CreateInstance(Type, 对象[])
(),但即使创建实例,也无法获取文本属性的值。
var frm = (Form)Activator.CreateInstance(type)