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

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

' 必须引用命名空间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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值