反射应用之一:根据控件名、属性名进行取值和赋值

'必须引用命名空间System.Reflection,System.ComponentModel

'以下根据控件名和属性名取值

Public Function GetValueControlProperty( ByVal ClassInstance As Object , ByVal ControlName As String , ByVal PropertyName As String ) As Object

Dim Result As Object

Dim myType As Type = ClassInstance.GetType

Dim myFieldInfo As FieldInfo = myType.GetField("_" & ControlName, BindingFlags.NonPublic Or _

BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.Instance)

If Not myFieldInfo Is Nothing Then

Dim properties As PropertyDescriptorCollection = TypeDescriptor.GetProperties(myType)

Dim myProperty As PropertyDescriptor = properties.Find(PropertyName, False )

If Not myProperty Is Nothing Then

Dim ctr As Object

ctr = myFieldInfo.GetValue(ClassInstance)

Try

Result = myProperty.GetValue(ctr)

Catch ex As Exception

MsgBox(ex.Message)

End Try

End If

End If

Return Result

End Function

'以下根据控件名和属性名赋值

Public Function SetValueControlProperty( ByVal ClassInstance As Object , ByVal ControlName As String , ByVal PropertyName As String , ByVal Value As Object ) As Object

Dim Result As Object

Dim myType As Type = ClassInstance.GetType

Dim myFieldInfo As FieldInfo = myType.GetField("_" & ControlName, BindingFlags.NonPublic _

Or BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.Instance) '加"_"这个是特要紧的

If Not myFieldInfo Is Nothing Then

Dim properties As PropertyDescriptorCollection = TypeDescriptor.GetProperties(myType)

Dim myProperty As PropertyDescriptor = properties.Find(PropertyName, False ) '这里设为True就不用区分大小写了

If Not myProperty Is Nothing Then

Dim ctr As Object

ctr = myFieldInfo.GetValue(ClassInstance) '取得控件实例

Try

myProperty.SetValue(ctr, Value)

Result = ctr

Catch ex As Exception

MsgBox(ex.Message)

End Try

End If

End If

Return Result

End Function

'调用

'以下实现Label1.Text=TextBox1.Text,Label2.Text=TextBox2

Private Sub Button1_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim i As Integer

For i = 1 To 2

Me .SetValueControlProperty( Me , "Label" & i.ToString, "Text", GetValueControlProperty( Me , "TextBox" & i.ToString, "Text"))

Next i

End Sub

Published At
Categories with Web编程
Tagged with
comments powered by Disqus