按控件实例名称及其属性名称实现动态赋值

' 按控件实例名称及其属性名称实现动态赋值

' 入口参数 :ClassInstance 控件所在的类实例

' ControlName 控件实例名称 , 区分大小写

' PropertyName 要设值的控件属性名称 , 区分大小写 ( 其实这里可以不必区分大小写的 , 只是为了养成习惯 , 我这样要求自己的 )

' Value 新值 , 类型是一个 Object, 这倒是要注意的

' 出口参数 : True 则重设成功, False 不成功

' 需要 Imports System.Reflection 和 Imports System.ComponentModel

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

Dim Result As Boolean = False ' 返回值。虽然默认是 Flase, 但我还是喜欢这样设它,主要是看着明了

' 下面我不注释了

Dim myType As Type = ClassInstance.GetType

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

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

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 = True

Catch ex As Exception

MsgBox(ex.Message)

End Try

End If

End If

Return Result

End Function

' 测试

Private Sub Test()

SetValueControlProperty( Me , "Button1", "Text", "Hello")

SetValueControlProperty( Me , "Button2", "Visible", False )

Dim frm As New Form2

SetValueControlProperty(frm, "MyTextBox", "Text", " 应该还行吧 ?")

frm.Show()

End Sub

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