按控件实例名称及其属性名称实现动态赋值
发表于:2007-06-30来源:作者:点击数:
标签:
@#按控件实例名称及其属性名称实现动态赋值 @#入口参数:ClassInstance 控件所在的类实例 @# ControlName 控件实例名称,区分大小写 @# PropertyName 要设值的控件属性名称,区分大小写(其实这里可以不必区分大小写的,只是为了养成习惯,我这样要求自己的) @# Val
@#按控件实例名称及其属性名称实现动态赋值
@#入口参数: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
原文转自:http://www.ltesting.net