我现在已经找了差不多一个星期,但我似乎无法解决我的简单问题。我想获得项目中所有表单的所有名称和文本属性。
这是我的代码:
using System.Reflection;
Type Myforms = typeof(Form);
foreach (Type formtype in Assembly.GetExecutingAssembly().GetTypes())
{
if (Myforms.IsAssignableFrom(formtype))
{
MessageBox.Show(formtype.Name.ToString()); // shows all name of form
MessageBox.Show(formtype.GetProperty("Text").GetValue(type,null).ToString()); // it shows null exception
}
}
我需要表单的名称和.Text
将其存储在数据库中以控制用户权限。
答案 0 :(得分:3)
MessageBox.Show(formtype.GetProperty("Text").GetValue(type,null).ToString());
显示异常,因为您需要Form
的实例来获取其Text
属性,因为Form不是静态Text属性。
要获取默认的Text属性,请创建一个实例
var frm = (Form)Activator.CreateInstance(formtype);
MessageBox.Show(formtype.GetProperty("Text").GetValue(frm, null).ToString());
答案 1 :(得分:1)
要阅读媒体资源,您需要制作表格的新实例。您可以在上面浏览从Form
- 类继承的所有类型。您可以阅读不同的表单类名称,但这就是它。
要阅读Text
- 属性,您需要浏览Forms
的实例。您可以使用Application.OpenForms
阅读打开表单的Text
和Name
属性。
您可以尝试阅读这些属性:
List<KeyValuePair<string, string>> formDetails = new List<KeyValuePair<string, string>>();
Type formType = typeof(Form);
foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())
{
if (formType.IsAssignableFrom(type))
{
using (var frm = (Form)Activator.CreateInstance(type))
{
formDetails.Add(new KeyValuePair<string, string>(frm.Name, frm.Text));
}
}
}
我修复了代码,现在应该可以使用了。
答案 2 :(得分:1)
属性.Text
和.Name
不是静态的。因此,如果不调用该表单的构造函数,则无法获取该属性的值。您必须创建该表单的对象才能读取该属性。
List<String> formList = new List<String>();
Assembly myAssembly = Assembly.GetExecutingAssembly();
foreach (Type t in myAssembly.GetTypes())
{
if (t.BaseType == typeof(Form))
{
ConstructorInfo ctor = t.GetConstructor(Type.EmptyTypes);
if (ctor != null)
{
Form f = (Form)ctor.Invoke(new object[] { });
formList.Add("Text: " + f.Text + ";Name: " + f.Name);
}
}
}