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

'必须引用命名空间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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值