環境:
WindowsXP
VisualStudio2008 Professional
言語:
VB.NET
あるクラスのプロパティへ
Public Property Prop1 As Integer/Prop2/Prop3/・・・・と設定し、ゲットやセットするのにループしていれる方法はあるのでしょうか。
例えば・・・
For I As Integer = 1 To 40
Console.WriteLine(Prop & I)
Next
若しくは
For Each Property As Property型??(Object??) In Properties??(プロパティコレクション??)
Console.WriteLine(Property.Value??)
Next
という感じです。
フォームなどのコントロールで、複数のコントロールへ同じ内容を入れ込むときに使ったことはあるのですが、プロパティでも同じことができるのかなと思い質問してみました。
たとえば、Button1コントロールのプロパティとその値は、以下のような感じで表示できたと思います。
Dim pi As System.Reflection.PropertyInfo
For Each pi In Me.Button1.GetType().GetProperties()
MsgBox(pi.Name + "=" + pi.GetValue(Me.Button1, Nothing).ToString())
Next
質問者
お礼
ありがとうございます。
なるほど・・・GetTypeでGetPropertiesですね。
Riflectionをつかうのは知りませんでした。
まだまだ勉強不足ですね。。。
ヒントをいただいて色々と調べた結果以下でクラスのプロパティで設定した値を取得できました。
※SampleControlClassを生成しているのは、元々取得したいプロパティが入っているSampleClassがオブジェクトを生成しないMustInheritとしているので、継承しているSampleControlClassをオブジェクト生成して入れ込んでます。
Dim SCClass As New SampleClassControl
Dim ClsType As Type = GetType(SampleClass)
Dim Prop() As PropertyInfo = ClsType.GetProperties
For Each props As PropertyInfo In Prop
Console.WriteLine(CType(props.GetValue(SCClass, Nothing), Integer))
Next
ちなみにセットもついでにできました。
For Each props As PropertyInfo In Prop
props.SetValue(SCClass, I, Nothing)
I += 1
Next
一応、期待通りにことは運んだんですが、他にもありますかね?
お礼
ありがとうございます。 なるほど・・・GetTypeでGetPropertiesですね。 Riflectionをつかうのは知りませんでした。 まだまだ勉強不足ですね。。。 ヒントをいただいて色々と調べた結果以下でクラスのプロパティで設定した値を取得できました。 ※SampleControlClassを生成しているのは、元々取得したいプロパティが入っているSampleClassがオブジェクトを生成しないMustInheritとしているので、継承しているSampleControlClassをオブジェクト生成して入れ込んでます。 Dim SCClass As New SampleClassControl Dim ClsType As Type = GetType(SampleClass) Dim Prop() As PropertyInfo = ClsType.GetProperties For Each props As PropertyInfo In Prop Console.WriteLine(CType(props.GetValue(SCClass, Nothing), Integer)) Next ちなみにセットもついでにできました。 For Each props As PropertyInfo In Prop props.SetValue(SCClass, I, Nothing) I += 1 Next 一応、期待通りにことは運んだんですが、他にもありますかね?