トップ回答者
フォームのコントロールオブジェクトを取得する方法。

質問
-
現在、Windowsフォームのアプリケーションを作成しています。
【質問内容】
Windowsフォームにコントロールを配置し、そのコントロールを取得するメソッドを作成しているのですが、下記サンプルコードのTypeInfo.GetFieldメソッドでは、コントロールを取得することが出来ません。GetPropertyメソッドでは取得することは確認しているのですが、GetFieldメソッドでは取得することが出来ないのは何故でしょうか?
【作業手順】
1.Windowsフォームを作成。
2.取得するコントロールを配置(コンポーネントレイに配置されないコントロールなら何でもOK)
3.下記コードを実装。
【サンプルコード】
サンプルコードでは、取得するコントロールとしてStatusStripのToolStripStatusLabel1を配置。
ボタンコントロールも配置して、ボタンクリックイベント時に実装。
下記サンプルコードはカスタムコントロールに実装することを検討しているため、Reflectionクラスを使用している。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TypeInfo As Type = Me.GetType
Dim InfoSS As Reflection.FieldInfo = TypeInfo.GetField("ToolStripStatusLabel1", _
System.Reflection.BindingFlags.NonPublic Or _
System.Reflection.BindingFlags.Instance)
If InfoSS IsNot Nothing Then
Dim TSSLabel As ToolStripStatusLabel = DirectCast(InfoSS.GetValue(Me), ToolStripStatusLabel)
If TSSLabel IsNot Nothing Then
MessageBox.Show("取得成功!")
Else
MessageBox.Show("取得失敗")
End If
End IfEnd Sub
回答
-
インスタンス名が違うからだと思います
VS2005が自動生成したオブジェクトは インスタンス名の前に『_』が付くようです
フィールドとして
Private mStr2 as String = "456"
を追加してPrivate Sub Button1_Click()
dim typeInfo as Type = me.GetType
dim infoSS() as FieldInfo
infoSS = typeINfo.GetFields( _
Reflection.BindingFlags.NonPublic Or _
Reflection.BindingFlags.Instance)
for each oItem as Reflection.FieldInfo in infoSS
Debug.WriteLine( oItem.Name )
next
End Sub
といった具合で確認してみましょう出力ウィンドウに『_ToolStripStatusLabel1』などと表示されると思いますよ
すべての返信
-
インスタンス名が違うからだと思います
VS2005が自動生成したオブジェクトは インスタンス名の前に『_』が付くようです
フィールドとして
Private mStr2 as String = "456"
を追加してPrivate Sub Button1_Click()
dim typeInfo as Type = me.GetType
dim infoSS() as FieldInfo
infoSS = typeINfo.GetFields( _
Reflection.BindingFlags.NonPublic Or _
Reflection.BindingFlags.Instance)
for each oItem as Reflection.FieldInfo in infoSS
Debug.WriteLine( oItem.Name )
next
End Sub
といった具合で確認してみましょう出力ウィンドウに『_ToolStripStatusLabel1』などと表示されると思いますよ
-