2

私はほぼ1週間探していますが、単純な問題を解決できないようです. プロジェクト内のすべてのフォームのすべての名前とテキスト プロパティを取得したいと考えています。

これが私のコードです:

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ユーザー権限を制御するためにデータベースに保存するには、フォームの名前とが必要です。

4

3 に答える 3

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());
于 2014-07-29T04:16:36.877 に答える
1

プロパティを読み取るには、フォームの新しいインスタンスを作成する必要があります。上では、クラスから継承しているすべてのタイプをブラウズしていますForm。さまざまな 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));
      }
   }
}

コードを修正したので、今すぐ動作するはずです。

于 2014-07-29T04:27:28.153 に答える