リフレクションを使用して各プロパティ名とその値をクラスから取得するアプリを作成していますSystem.Windows.Forms.SystemInformation
。現在のコードはこのスレッドのスニペットです。
マークの答えはおそらく最高ですが、反射を行うのは初めてであり、彼のスキルが高すぎるため、私には複雑すぎます。
ということで、最初にゲットしたのがこれ。
foreach (PropertyInfo prop in typeof(System.Windows.Forms.SystemInformation).GetProperties())
{
richTextBox1.AppendText(prop.Name + "\t\t" + prop.GetValue(null, null)
}
しかし、クラスの属性をループする方法がわかりませんpowerstatus
。現在の小道具がプリミティブ型かどうかを確認することを考えました。そうでない場合は、upperfunction を再帰的に呼び出します。したがって、次のようになります。
private void readProperties(Type T, int indent)
{
//var x = System.Windows.Forms.SystemInformation.ActiveWindowTrackingDelay;
foreach (PropertyInfo prop in T.GetProperties())
{
for (int x = 0; x < indent; x++)
richTextBox1.AppendText("\t");
richTextBox1.AppendText(prop.Name + "\t\t" + prop.GetValue(null, null) +"\n");
if (!prop.PropertyType.IsPrimitive)
readProperties(prop.PropertyType, indent+1);
//System.Windows.Forms.PowerStatus PS = new PowerStatus();
}
}
しかし今、私は例外を取得します:「Die nicht-statische Methode erfordert ein Ziel」は次のように翻訳されました:「非静的メソッドにはターゲットが必要です」
関数が初めて再帰的に呼び出されると、例外がスローされます。属性は typeof である primaryMonitorSize ですSize
。Size
それは私がタイプを解析しているという事実と関係がありSystem.Windows.Forms.SystemInformation.primaryMonitorSize
、実際のタイプを知っているわけではありませんが、winFormのサイズである可能性があるため、プログラムのどのメンバーであるかはわかりません。
では、どうすればこれを修正できますか?すべての建設的な批判に感謝します。
@Edit: これは msdn の例です。しかし、それはきれいに見えません。 http://msdn.microsoft.com/de-de/library/system.windows.forms.systeminformation.powerstatus.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2