如何获取每个表单的Text属性

时间:2014-07-29 04:05:37

标签: c# winforms text types getproperty

我现在已经找了差不多一个星期,但我似乎无法解决我的简单问题。我想获得项目中所有表单的所有名称和文本属性。

这是我的代码:

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将其存储在数据库中以控制用户权限。

3 个答案:

答案 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阅读打开表单的TextName属性。

您可以尝试阅读这些属性:

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);
        }
    }
}