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)