[水如烟.交流]按控件实例名称及其属性名称实现动态赋值
这是学反射的一点成绩,这个问题问的人不少,供大家参考。
后面可能对它的功能进行一些补充,
有兴趣的可以到我的Blog上看看,大家也不妨提供些好意见。
http://blog.csdn.net/lzmtw/archive/2004/08/01/57638.aspx
'按控件实例名称及其属性名称实现动态赋值
'入口参数: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
问题点数:100、回复次数:34Top
1 楼lzmtw(水如烟)回复于 2004-08-01 01:32:45 得分 0
好了,回家睡觉觉了
各位晚安Top
2 楼AntingZ(夕惕若)回复于 2004-08-01 01:54:44 得分 8
这么早就睡觉Top
3 楼lzmtw(水如烟)回复于 2004-08-01 09:28:13 得分 0
是不是CSDN服务器有问题
[我参与问题][我得分问题]都打不开,弄到CSDN文档里头的也不能链接上去。Top
4 楼lzmtw(水如烟)回复于 2004-08-01 14:08:46 得分 0
怎么没有应哪,是不是没有多大用处?
(7777)Top
5 楼lwbmail(努力工作...)回复于 2004-08-01 14:20:16 得分 4
我来了!好帖,等下我再看
lzmtw(水如烟)谢谢了!
Top
6 楼lwbmail(努力工作...)回复于 2004-08-01 14:21:45 得分 8
好像近段时间来的人少了许多
顶!Top
7 楼AKillGodKillBuddha(神挡杀神 佛挡杀佛)回复于 2004-08-01 14:22:06 得分 8
楼主 帮了我的大忙了Top
8 楼lzmtw(水如烟)回复于 2004-08-01 14:23:08 得分 0
呵,也好,反正也忙着Top
9 楼lzmtw(水如烟)回复于 2004-08-01 14:25:31 得分 0
哈,终于有人说好了,我可是昨晚弄到一点才基本明白的
原来做出来的好复杂Top
10 楼lzmtw(水如烟)回复于 2004-08-01 15:02:43 得分 0
我点[参与问题]时,总是不正常,不知怎么回事:
Microsoft OLE DB Provider for SQL Server 错误 '80004005'
Warning: Fatal error 823 occurred at Aug 1 2004 3:01PM
/Expert/member/MyForum.asp,行 167
Top
11 楼AntingZ(夕惕若)回复于 2004-08-01 16:14:44 得分 8
很正常啊
可能是你的电脑有问题,重装一下系统就好了! ^_^Top
12 楼lzmtw(水如烟)回复于 2004-08-01 16:31:04 得分 0
呵,你别吓我Top
13 楼lzmtw(水如烟)回复于 2004-08-01 16:36:10 得分 0
呵,这个帐号是正常的Top
14 楼lzmtw(水如烟)回复于 2004-08-01 16:38:06 得分 0
呵,刚才我是用HanMo (翰墨) 这个帐号,它好正常
可lzmtw(水如烟) 就是不行了
你说是哪的问题Top
15 楼lzmtw(水如烟)回复于 2004-08-02 00:25:48 得分 0
睡觉。Top
16 楼Ztony(www)回复于 2004-08-02 09:34:04 得分 8
TO:水如烟:
你的动态赋值,对于动态生成的控件没有作用。
无法赋值。。。。。。
我用的是给继承过来的动态 生成的控件赋值,。。。Top
17 楼wing0(d-link)回复于 2004-08-02 09:45:57 得分 8
markTop
18 楼yanwc()回复于 2004-08-02 13:47:19 得分 8
markTop
19 楼lzmtw(水如烟)回复于 2004-08-02 21:11:22 得分 0
哈,果是服务器上的事
现在就正常了Top
20 楼wdwd05(学.NET,从头开始)回复于 2004-08-02 23:03:52 得分 8
晕,我怎么测试什么也不显示~搞什么~Top
21 楼lzmtw(水如烟)回复于 2004-08-04 18:26:13 得分 0
现在升级一个收费系统,从FOX到NET的,数据库不能换,得要用原来的DBase,计算过程要取它一个表中的定义过程。为核数和调试方便,弄了一个简易的计算器。代码贴在BLOG上,初学的应该有所启发。
用CodeDom、Reflection做一个简易计算器
http://blog.csdn.net/lzmtw/archive/2004/08/04/64028.aspx
Top
22 楼lzmtw(水如烟)回复于 2004-08-08 00:29:33 得分 0
哎,原来中国队一打球,我肯定去看的
这七八年,我都没去看了
几小时前,还是忍不住看了
最后老婆说,你看,都说你不要看了......Top
23 楼ilovedonny(迷失的代码工)回复于 2004-08-08 23:38:09 得分 8
TO: lzmtw(水如烟)
能留下你的MSN吗?
有问题请教。Top
24 楼lzmtw(水如烟)回复于 2004-08-09 01:38:41 得分 0
真不好意思,我不大用QQ、MSNTop
25 楼lzmtw(水如烟)回复于 2004-08-09 02:54:20 得分 0
睡觉,要不早上又上不了班了
各位好睡Top
26 楼ilovedonny(迷失的代码工)回复于 2004-08-13 03:42:36 得分 8
哦,那邮箱能留一个吗?Top
27 楼lzmtw(水如烟)回复于 2004-08-13 08:36:07 得分 0
LzmTW@21CN.com
不过你发了邮件还得用CSDN的消息说一声Top
28 楼lzmtw(水如烟)回复于 2004-08-13 08:37:09 得分 0
不要问概念之类的,我对概念一知半解Top
29 楼Lmovie()回复于 2004-08-13 09:14:54 得分 8
留着以后用!呵呵!!:)Top
30 楼lzmtw(水如烟)回复于 2004-08-13 20:28:55 得分 0
回家了。今晚凌晨看开幕式。
祝各位节日快乐,今天是人类的共同节日(书上说的)。Top
31 楼sky9531(玩得晚,睡得晚)回复于 2004-08-13 23:10:28 得分 8
正在等待中...Top
32 楼lzmtw(水如烟)回复于 2004-08-15 04:24:37 得分 0
田亮杨景辉入金Top
33 楼lzmtw(水如烟)回复于 2004-08-15 04:30:39 得分 0
女排三比一拿下了小美(输了就自然变得小了些)Top
34 楼lzmtw(水如烟)回复于 2004-08-15 18:26:58 得分 0
To Ztony(www):
动态的要加上 Or BindingFlags.InstanceTop




